From a5ef6cfc961fe2348ad5690d7162e5f23bb7a8db Mon Sep 17 00:00:00 2001 From: NightFyre <80198020+xCENTx@users.noreply.github.com> Date: Fri, 26 Jan 2024 08:10:46 -0500 Subject: [PATCH 1/3] Features and Adjustments SDK - Changed TArray function name "Num" to "Count" for clarity CONFIG - included additional helper functions FEATURE - General cleanup - Include features as functions NOTES: - new feature functions have not been implemented ~squish-- Update feature.h - forgot to include function declarations --- SDK/Basic.hpp | 2 +- config.cpp | 63 +++++++++++++++++++++ config.h | 7 +++ feature.cpp | 150 ++++++++++++++++++++++++++++++++++++++++++-------- feature.h | 14 +++++ src/Menu.cpp | 2 +- 6 files changed, 213 insertions(+), 25 deletions(-) diff --git a/SDK/Basic.hpp b/SDK/Basic.hpp index 2bb63ce..a0e55c1 100644 --- a/SDK/Basic.hpp +++ b/SDK/Basic.hpp @@ -97,7 +97,7 @@ public: return Data[Index]; } - inline int32 Num() + inline int32 Count() { return NumElements; } diff --git a/config.cpp b/config.cpp index 0a7cd5c..958ae91 100644 --- a/config.cpp +++ b/config.cpp @@ -40,10 +40,25 @@ SDK::UWorld* config::GetUWorld() { auto gworld = signature("48 8B 05 ? ? ? ? EB 05").instruction(3).add(7); gworld_ptr = gworld.GetPointer(); + if (gworld_ptr) + gWorld = *(SDK::UWorld**)gworld_ptr; } return (*(SDK::UWorld**)(gworld_ptr)); } +SDK::UPalCharacterImportanceManager* GetCharacterImpManager() +{ + SDK::UWorld* pWorld = config::gWorld; + if (!pWorld) + return; + + SDK::UGameInstance* pGameInstance = pWorld->OwningGameInstance; + if (!pGameInstance) + return nullptr; + + return static_cast(pGameInstance)->CharacterImportanceManager; +} + SDK::APalPlayerCharacter* config::GetPalPlayerCharacter() { @@ -54,6 +69,54 @@ SDK::APalPlayerCharacter* config::GetPalPlayerCharacter() return nullptr; } +SDK::APalPlayerState* config::GetPalPlayerState() +{ + SDK::APalPlayerCharacter* pPlayer = GetPalPlayerCharacter(); + if (!pPlayer) + return nullptr; + + return static_cast(pPlayer->PlayerState); +} + +bool GetTAllPlayers(SDK::TArray* outResult) +{ + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + if (!mPal) + return false; + + mPal->GetAllPlayer(outResult); + return true; +} + +bool GetTAllImpNPC(SDK::TArray* outResult) +{ + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + if (!mPal) + return false; + + mPal->GetImportantNPC(outResult); + return true; +} + +bool GetTAllNPC(SDK::TArray* outResult) +{ + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + if (!mPal) + return false; + + mPal->GetAllNPC(outResult); + return true; +} + +bool GetTAllPals(SDK::TArray* outResult) +{ + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + if (!mPal) + return false; + + mPal->GetAllPalCharacter(outResult); + return true; +} void config::Init() diff --git a/config.h b/config.h index d17412a..5d14a19 100644 --- a/config.h +++ b/config.h @@ -39,6 +39,7 @@ public: char ItemName[255]; char inputTextBuffer[255] = ""; int EqModifiler = 1; + static SDK::UWorld* gWorld; SDK::APalPlayerCharacter* localPlayer = NULL; SDK::TArray AllPlayers = {}; SDK::UPalCharacterImportanceManager* UCIM = NULL; @@ -58,8 +59,14 @@ public: //static function static SDK::UWorld* GetUWorld(); + static SDK::UPalCharacterImportanceManager* GetCharacterImpManager(); static SDK::APalPlayerCharacter* GetPalPlayerCharacter(); + static SDK::APalPlayerState* GetPalPlayerState(); static SDK::TArray GetTAllPlayers(); + static bool GetTAllPlayers(SDK::TArray* outResult); + static bool GetTAllImpNPC(SDK::TArray* outResult); + static bool GetTAllNPC(SDK::TArray* outResult); + static bool GetTAllPals(SDK::TArray* outResult); static void Init(); static void Update(const char* filterText); static const std::vector& GetFilteredItems(); diff --git a/feature.cpp b/feature.cpp index df8ee2c..c0e1a90 100644 --- a/feature.cpp +++ b/feature.cpp @@ -1,37 +1,39 @@ #include "pch.h" #include "feature.h" +using namespace SDK; void ESP() { - if (Config.GetPalPlayerCharacter() != NULL) - { - if (Config.GetPalPlayerCharacter()->ShooterComponent != NULL) - { - if(Config.GetPalPlayerCharacter()->ShooterComponent->GetHasWeapon() != NULL) - { - DrawUActorComponent(Config.GetPalPlayerCharacter()->ShooterComponent->GetHasWeapon()->InstanceComponents, ImColor(128, 0, 0)); - } - } - if (Config.UCIM != NULL) - { - SDK::TArray T = {}; - Config.UCIM->GetAllPalCharacter(&T); - if (T.IsValid()) - { - for (int i = 0; i < T.Num(); i++) - { - ImGui::GetBackgroundDrawList()->AddText(nullptr, 16, ImVec2(10, 10 + (i * 30)), ImColor(128,0,0), T[i]->GetFullName().c_str()); - } - } - } - } + APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); + if (!pPalCharacter) + return; + + UPalShooterComponent* pShootComponent = pPalCharacter->ShooterComponent; + if (!pShootComponent) + return; + + APalWeaponBase* pWeapon = pShootComponent->HasWeapon; + if (pWeapon) + DrawUActorComponent(pWeapon->InstanceComponents, ImColor(128, 0, 0)); + + if (!Config.UCIM) + return; + + TArray T = {}; + Config.UCIM->GetAllPalCharacter(&T); + if (!T.IsValid()) + return; + + for (int i = 0; i < T.Count(); i++) + ImGui::GetBackgroundDrawList()->AddText(nullptr, 16, ImVec2(10, 10 + (i * 30)), ImColor(128,0,0), T[i]->GetFullName().c_str()); } + void DrawUActorComponent(SDK::TArray Comps,ImColor color) { ImGui::GetBackgroundDrawList()->AddText(nullptr, 16, ImVec2(ImGui::GetIO().DisplaySize.x / 2, ImGui::GetIO().DisplaySize.y / 2), color, "Drawing..."); if (Comps.IsValid()) { - for (int i = 0; i < Comps.Num(); i++) + for (int i = 0; i < Comps.Count(); i++) { if (Comps[i] != NULL) @@ -43,3 +45,105 @@ void DrawUActorComponent(SDK::TArray Comps,ImColor color) } } + +void ResetStamina() +{ + APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); + if (!pPalCharacter) + return; + + UPalCharacterParameterComponent* pParams = pPalCharacter->CharacterParameterComponent; + if (!pParams) + return; + + pParams->ResetSP(); +} + +void SetInfiniteAmmo(bool bInfAmmo) +{ + APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); + if (!pPalCharacter) + return; + + UPalShooterComponent* pShootComponent = pPalCharacter->ShooterComponent; + if (!pShootComponent) + return; + + APalWeaponBase* pWeapon = pShootComponent->HasWeapon; + if (pWeapon) + pWeapon->IsRequiredBullet = bInfAmmo ? false : true; + +} + +void SetCraftingSpeed(float mNewSpeed, bool bRestoreDefault = false) +{ + APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); + if (!pPalCharacter) + return; + + UPalCharacterParameterComponent* pParams = pPalCharacter->CharacterParameterComponent; + if (!pParams) + return; + + UPalIndividualCharacterParameter* ivParams = pParams->IndividualParameter; + if (!ivParams) + return; + + FPalIndividualCharacterSaveParameter sParams = ivParams->SaveParameter; + TArray mCraftSpeedArray = sParams.CraftSpeedRates.Values; + + if (mCraftSpeedArray.Count() > 0) + mCraftSpeedArray[0].Value = bRestoreDefault ? 1.0f : mNewSpeed; +} + +void AddTechPoints(__int32 mPoints) +{ + APalPlayerState* mPlayerState = Config.GetPalPlayerState(); + if (!mPlayerState) + return; + + UPalTechnologyData* pTechData = mPlayerState->TechnologyData; + if (!pTechData) + return; + + pTechData->TechnologyPoint += mPoints; +} + +void AddAncientTechPoints(__int32 mPoints) +{ + APalPlayerState* mPlayerState = Config.GetPalPlayerState(); + if (!mPlayerState) + return; + + UPalTechnologyData* pTechData = mPlayerState->TechnologyData; + if (!pTechData) + return; + + pTechData->bossTechnologyPoint += mPoints; +} + +void RemoveTechPoints(__int32 mPoints) +{ + APalPlayerState* mPlayerState = Config.GetPalPlayerState(); + if (!mPlayerState) + return; + + UPalTechnologyData* pTechData = mPlayerState->TechnologyData; + if (!pTechData) + return; + + pTechData->TechnologyPoint -= mPoints; +} + +void RemoveAncientTechPoint(__int32 mPoints) +{ + APalPlayerState* mPlayerState = Config.GetPalPlayerState(); + if (!mPlayerState) + return; + + UPalTechnologyData* pTechData = mPlayerState->TechnologyData; + if (!pTechData) + return; + + pTechData->bossTechnologyPoint -= mPoints; +} \ No newline at end of file diff --git a/feature.h b/feature.h index 54d6ce2..cd0b46a 100644 --- a/feature.h +++ b/feature.h @@ -9,3 +9,17 @@ void DrawUActorComponent(SDK::TArray Comps,ImColor color) void DrawPosition(); + +void ResetStamina(); + +void SetInfiniteAmmo(bool bInfAmmo); + +void SetCraftingSpeed(float mNewSpeed, bool bRestoreDefault = false); + +void AddTechPoints(__int32 mPoints); + +void AddAncientTechPoints(__int32 mPoints); + +void RemoveTechPoints(__int32 mPoints); + +void RemoveAncientTechPoint(__int32 mPoints); \ No newline at end of file diff --git a/src/Menu.cpp b/src/Menu.cpp index 6446db4..771401d 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -10,7 +10,7 @@ void DetourEqui(SDK::UPalNetworkIndividualComponent* p_this, SDK::FPalInstanceID { if(AddStatusPointArray->IsValid()) { - for (int i = 0; i < AddStatusPointArray->Num(); i++) + for (int i = 0; i < AddStatusPointArray->Count(); i++) { (*AddStatusPointArray)[i].StatusPoint = -1 * Config.EqModifiler; } From a454ccd815c4fccc8dd6f8668f5704441b4fdc4b Mon Sep 17 00:00:00 2001 From: NightFyre <80198020+xCENTx@users.noreply.github.com> Date: Fri, 26 Jan 2024 12:19:18 -0500 Subject: [PATCH 2/3] address compile errors - 'SetCraftingSpeed': redefinition of default argument: parameter 1 NetCrack-PalWorld D:\case\repos\feature.cpp 78 - 'GetCharacterImpManager': function must return a value NetCrack-PalWorld D:\case\repos\config.cpp 53 - unresolved external symbol "Config::gWorld" --- config.cpp | 16 ++++++++-------- config.h | 2 +- feature.cpp | 2 +- src/Menu.cpp | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/config.cpp b/config.cpp index 958ae91..c70b6f8 100644 --- a/config.cpp +++ b/config.cpp @@ -41,16 +41,16 @@ SDK::UWorld* config::GetUWorld() auto gworld = signature("48 8B 05 ? ? ? ? EB 05").instruction(3).add(7); gworld_ptr = gworld.GetPointer(); if (gworld_ptr) - gWorld = *(SDK::UWorld**)gworld_ptr; + Config.gWorld = *(SDK::UWorld**)gworld_ptr; } return (*(SDK::UWorld**)(gworld_ptr)); } -SDK::UPalCharacterImportanceManager* GetCharacterImpManager() +SDK::UPalCharacterImportanceManager* config::GetCharacterImpManager() { - SDK::UWorld* pWorld = config::gWorld; + SDK::UWorld* pWorld = Config.gWorld; if (!pWorld) - return; + return nullptr; SDK::UGameInstance* pGameInstance = pWorld->OwningGameInstance; if (!pGameInstance) @@ -80,7 +80,7 @@ SDK::APalPlayerState* config::GetPalPlayerState() bool GetTAllPlayers(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); if (!mPal) return false; @@ -90,7 +90,7 @@ bool GetTAllPlayers(SDK::TArray* outResult) bool GetTAllImpNPC(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); if (!mPal) return false; @@ -100,7 +100,7 @@ bool GetTAllImpNPC(SDK::TArray* outResult) bool GetTAllNPC(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); if (!mPal) return false; @@ -110,7 +110,7 @@ bool GetTAllNPC(SDK::TArray* outResult) bool GetTAllPals(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); if (!mPal) return false; diff --git a/config.h b/config.h index 5d14a19..e75e03d 100644 --- a/config.h +++ b/config.h @@ -39,7 +39,7 @@ public: char ItemName[255]; char inputTextBuffer[255] = ""; int EqModifiler = 1; - static SDK::UWorld* gWorld; + SDK::UWorld* gWorld = nullptr; SDK::APalPlayerCharacter* localPlayer = NULL; SDK::TArray AllPlayers = {}; SDK::UPalCharacterImportanceManager* UCIM = NULL; diff --git a/feature.cpp b/feature.cpp index c0e1a90..6e3f5fb 100644 --- a/feature.cpp +++ b/feature.cpp @@ -75,7 +75,7 @@ void SetInfiniteAmmo(bool bInfAmmo) } -void SetCraftingSpeed(float mNewSpeed, bool bRestoreDefault = false) +void SetCraftingSpeed(float mNewSpeed, bool bRestoreDefault) { APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); if (!pPalCharacter) diff --git a/src/Menu.cpp b/src/Menu.cpp index 251b981..7a37ca1 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -279,7 +279,7 @@ namespace DX11_Base { SDK::UPalItemContainerMultiHelper* InventoryMultiHelper = InventoryData->InventoryMultiHelper; if (InventoryMultiHelper != NULL) { SDK::TArray Containers = InventoryMultiHelper->Containers; - if (Containers.Num() == 0) { + if (Containers.Count() == 0) { return; } From 294e31579ee92f58bb6d6d7b4d428e86e90c83de Mon Sep 17 00:00:00 2001 From: NightFyre <80198020+xCENTx@users.noreply.github.com> Date: Fri, 26 Jan 2024 19:28:58 -0500 Subject: [PATCH 3/3] debug esp # Helpers - GetPlayerInventoryComponent - GetPlayerEquippedWeapon - GetActorsOfType --- SDK/Engine_classes.hpp | 4 +- config.cpp | 84 ++++++++++++++++++++++++++++++++++++++---- config.h | 6 +++ feature.cpp | 81 ++++++++++++++++++++++++++++++++++++++++ feature.h | 9 +++-- src/Menu.cpp | 6 +-- 6 files changed, 175 insertions(+), 15 deletions(-) diff --git a/SDK/Engine_classes.hpp b/SDK/Engine_classes.hpp index 70ef374..5273fd8 100644 --- a/SDK/Engine_classes.hpp +++ b/SDK/Engine_classes.hpp @@ -13923,7 +13923,9 @@ public: class ULevel : public UObject { public: - uint8 Pad_336A[0x90]; // Fixing Size After Last Property [ Dumper-7 ] + uint8 Pad_336A[0x70]; // Fixing Size After Last Property [ Dumper-7 ] + TArray Actors; // 0x98 + unsigned char kek_00A8[0x10]; // padding class UWorld* OwningWorld; // 0xB8(0x8)(ZeroConstructor, Transient, NoDestructor, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic) class UModel* Model; // 0xC0(0x8)(ZeroConstructor, NoDestructor, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic) TArray ModelComponents; // 0xC8(0x10)(ExportObject, ZeroConstructor, ContainsInstancedReference, UObjectWrapper, NativeAccessSpecifierPublic) diff --git a/config.cpp b/config.cpp index c70b6f8..3d02219 100644 --- a/config.cpp +++ b/config.cpp @@ -78,9 +78,31 @@ SDK::APalPlayerState* config::GetPalPlayerState() return static_cast(pPlayer->PlayerState); } -bool GetTAllPlayers(SDK::TArray* outResult) +SDK::UPalPlayerInventoryData* config::GetInventoryComponent() { - SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); + SDK::APalPlayerState* pPlayerState = GetPalPlayerState(); + if (!pPlayerState) + return nullptr; + + return pPlayerState->InventoryData; +} + +SDK::APalWeaponBase* config::GetPlayerEquippedWeapon() +{ + SDK::APalPlayerCharacter* pPalCharacter = GetPalPlayerCharacter(); + if (!pPalCharacter) + return nullptr; + + SDK::UPalShooterComponent* pWeaponInventory = pPalCharacter->ShooterComponent; + if (!pWeaponInventory) + return nullptr; + + return pWeaponInventory->HasWeapon; +} + +bool config::GetTAllPlayers(SDK::TArray* outResult) +{ + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); if (!mPal) return false; @@ -88,9 +110,9 @@ bool GetTAllPlayers(SDK::TArray* outResult) return true; } -bool GetTAllImpNPC(SDK::TArray* outResult) +bool config::GetTAllImpNPC(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); if (!mPal) return false; @@ -98,9 +120,9 @@ bool GetTAllImpNPC(SDK::TArray* outResult) return true; } -bool GetTAllNPC(SDK::TArray* outResult) +bool config::GetTAllNPC(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); if (!mPal) return false; @@ -108,9 +130,9 @@ bool GetTAllNPC(SDK::TArray* outResult) return true; } -bool GetTAllPals(SDK::TArray* outResult) +bool config::GetTAllPals(SDK::TArray* outResult) { - SDK::UPalCharacterImportanceManager* mPal = config::GetCharacterImpManager(); + SDK::UPalCharacterImportanceManager* mPal = GetCharacterImpManager(); if (!mPal) return false; @@ -118,6 +140,52 @@ bool GetTAllPals(SDK::TArray* outResult) return true; } +bool config::GetAllActorsofType(SDK::UClass* mType, std::vector* outArray, bool bLoopAllLevels, bool bSkipLocalPlayer) +{ + SDK::UWorld* pWorld = Config.gWorld; + if (!pWorld) + return false; + + SDK::AActor* pLocalPlayer = static_cast(GetPalPlayerCharacter()); + std::vector result; + + // Get Levels + SDK::TArray pLevelsArray = pWorld->Levels; + __int32 levelsCount = pLevelsArray.Count(); + + // Loop Levels Array + for (int i = 0; i < levelsCount; i++) + { + if (!pLevelsArray.IsValidIndex(i)) + continue; + + SDK::TArray pActorsArray = pLevelsArray[i]->Actors; + __int32 actorsCount = pActorsArray.Count(); + + // Loop Actor Array + for (int j = 0; j < actorsCount; j++) + { + if (!pActorsArray.IsValidIndex(j)) + continue; + + SDK::AActor* pActor = pActorsArray[j]; + if (!pActor || !pActor->RootComponent || (pActor == pLocalPlayer && bSkipLocalPlayer)) + continue; + + if (!pActor->IsA(mType)) + continue; + + result.push_back(pActor); + } + + if (bLoopAllLevels) + continue; + else + break; + } + *outArray = result; + return result.size() > 0; +} void config::Init() { diff --git a/config.h b/config.h index e75e03d..be280ad 100644 --- a/config.h +++ b/config.h @@ -29,6 +29,9 @@ public: bool IsQuick = false; bool matchDbItems = true; bool isEq = false; + bool isDebugESP = false; + float mDebugESPDistance = 5.0f; + //def and value float SpeedModiflers = 1.0f; int DamageUp = 0; @@ -62,11 +65,14 @@ public: static SDK::UPalCharacterImportanceManager* GetCharacterImpManager(); static SDK::APalPlayerCharacter* GetPalPlayerCharacter(); static SDK::APalPlayerState* GetPalPlayerState(); + static SDK::UPalPlayerInventoryData* GetInventoryComponent(); + static SDK::APalWeaponBase* GetPlayerEquippedWeapon(); static SDK::TArray GetTAllPlayers(); static bool GetTAllPlayers(SDK::TArray* outResult); static bool GetTAllImpNPC(SDK::TArray* outResult); static bool GetTAllNPC(SDK::TArray* outResult); static bool GetTAllPals(SDK::TArray* outResult); + static bool GetAllActorsofType(SDK::UClass* mType, std::vector* outArray, bool bLoopAllLevels = false , bool bSkipLocalPlayer = false); static void Init(); static void Update(const char* filterText); static const std::vector& GetFilteredItems(); diff --git a/feature.cpp b/feature.cpp index 6e3f5fb..971d761 100644 --- a/feature.cpp +++ b/feature.cpp @@ -28,6 +28,49 @@ void ESP() ImGui::GetBackgroundDrawList()->AddText(nullptr, 16, ImVec2(10, 10 + (i * 30)), ImColor(128,0,0), T[i]->GetFullName().c_str()); } +void ESP_DEBUG(float mDist, ImVec4 color, UClass* mEntType) +{ + APalPlayerCharacter* pLocalPlayer = Config.GetPalPlayerCharacter(); + if (!pLocalPlayer) + return; + + APalPlayerController* pPlayerController = static_cast(pLocalPlayer->Controller); + if (!pPlayerController) + return; + + std::vector actors; + if (!config::GetAllActorsofType(mEntType, &actors, true)) + return; + + auto draw = ImGui::GetWindowDrawList(); + + __int32 actorsCount = actors.size(); + for (AActor* actor : actors) + { + FVector actorLocation = actor->K2_GetActorLocation(); + FVector localPlayerLocation = pLocalPlayer->K2_GetActorLocation(); + float distantTo = pLocalPlayer->GetDistanceTo(actor); + if (distantTo > mDist) + continue; + + FVector2D outScreen; + if (!pPlayerController->ProjectWorldLocationToScreen(actorLocation, &outScreen, true)) + continue; + + char data[0x256]; + const char* StringData = "OBJECT: [%s]\nCLASS: [%s]\nINDEX: [%d]\nPOSITION: { %0.0f, %0.0f, %0.0f }\nDISTANCE: [%.0fm]"; + if (distantTo >= 1000.f) + { + distantTo /= 1000.f; + StringData = "OBJECT: [%s]\nCLASS: [%s]\nINDEX: [%d]\nPOSITION: { %0.0f, %0.0f, %0.0f }\nDISTANCE: [%.0fkm]"; + } + sprintf_s(data, StringData, actor->GetName().c_str(), actor->Class->GetFullName().c_str(), actorLocation.X, actorLocation.Y, actorLocation.Z, distantTo); + + ImVec2 screen = ImVec2(static_cast(outScreen.X), static_cast(outScreen.Y)); + draw->AddText(screen, ImColor(color), data); + } +} + void DrawUActorComponent(SDK::TArray Comps,ImColor color) { ImGui::GetBackgroundDrawList()->AddText(nullptr, 16, ImVec2(ImGui::GetIO().DisplaySize.x / 2, ImGui::GetIO().DisplaySize.y / 2), color, "Drawing..."); @@ -146,4 +189,42 @@ void RemoveAncientTechPoint(__int32 mPoints) return; pTechData->bossTechnologyPoint -= mPoints; +} + +// Credit: BennettStaley +void AddToInventoryContainer(__int32 mCount, __int32 mIndex) +{ + APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (!p_appc != NULL) + return; + + APalPlayerController* p_apc = static_cast(p_appc->Controller); + if (!p_apc) + return; + + APalPlayerState* p_apps = static_cast(p_apc->PlayerState); + if (!p_apps) + return; + + UPalPlayerInventoryData* InventoryData = p_apps->GetInventoryData(); + if (!InventoryData) + return; + + UPalItemContainerMultiHelper* InventoryMultiHelper = InventoryData->InventoryMultiHelper; + if (!InventoryMultiHelper) + return; + + TArray Containers = InventoryMultiHelper->Containers; + if (Containers.Count() <= 0) + return; + + UPalItemSlot* pSelectedSlot = Containers[0]->Get(mIndex); + + if (!pSelectedSlot != NULL) + return; + + FPalItemId FirstItemId = pSelectedSlot->GetItemId(); + __int32 StackCount = pSelectedSlot->GetStackCount(); + __int32 mNewCount = StackCount += mCount; + InventoryData->RequestAddItem(FirstItemId.StaticId, mNewCount, true); } \ No newline at end of file diff --git a/feature.h b/feature.h index cd0b46a..880942d 100644 --- a/feature.h +++ b/feature.h @@ -5,11 +5,12 @@ void ESP(); -void DrawUActorComponent(SDK::TArray Comps,ImColor color); +void ESP_DEBUG(double mDist, SDK::UClass* mEntType = SDK::AActor::StaticClass()); + +void DrawUActorComponent(SDK::TArray Comps, ImColor color); void DrawPosition(); - void ResetStamina(); void SetInfiniteAmmo(bool bInfAmmo); @@ -22,4 +23,6 @@ void AddAncientTechPoints(__int32 mPoints); void RemoveTechPoints(__int32 mPoints); -void RemoveAncientTechPoint(__int32 mPoints); \ No newline at end of file +void RemoveAncientTechPoint(__int32 mPoints); + +void AddToInventoryContainer(__int32 mCount, __int32 mIndex = 0); \ No newline at end of file diff --git a/src/Menu.cpp b/src/Menu.cpp index 7a37ca1..b99ce3e 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -518,9 +518,10 @@ namespace DX11_Base { if (g_GameVariables->m_ShowDemo) ImGui::ShowDemoWindow(); - } - + if (Config.isDebugESP) + ESP_DEBUG(Config.mDebugESPDistance); + } void Menu::MainMenu() { @@ -584,7 +585,6 @@ namespace DX11_Base { void Menu::HUD(bool* p_open) { - } void Menu::Loops()