From 0cfc05db2b6927c154f063dc0bb1b4958e1cf78b Mon Sep 17 00:00:00 2001 From: 2200151533 <2200151533@qq.com> Date: Tue, 30 Jan 2024 00:08:18 +0800 Subject: [PATCH] Updated some features, Creadit:Evoc --- config.h | 21 ++- database.h | 27 ++++ feature.cpp | 4 + src/Menu.cpp | 365 +++++++++++++++++++++++++++++++++++---------------- 4 files changed, 302 insertions(+), 115 deletions(-) diff --git a/config.h b/config.h index c089b5c..b83c387 100644 --- a/config.h +++ b/config.h @@ -7,6 +7,13 @@ typedef bool(*Tick)(SDK::APalPlayerCharacter* m_this, float DeltaSecond); typedef void(*SendDamage)(SDK::APalPlayerState* d_this, SDK::APalCharacter* Target, SDK::FPalDamageInfo* info); + + +//Creadit:Evoc +using FName_Ctor = void(__fastcall*)(SDK::FName*, const char*, int); +using n_time = std::chrono::high_resolution_clock; + + class config { public: @@ -15,6 +22,7 @@ public: DWORD64 offset_Tick = 0x2AB1DC0;//APalPlayerCharacter::Tick DWORD64 offset_senddmg = 0x2A57920; //APalPlayerState::SendDamage_ToServer //check + bool spec = false; bool IsESP = false; bool IsAimbot = false; bool IsSpeedHack = false; @@ -33,6 +41,9 @@ public: bool filterPlayer = false; bool bisRandomName = false; bool bisTeleporter = false; + bool filterCharacters = true; + bool filterGuilds = false; + bool filterMapParts = false; float SpeedModiflers = 1.0f; //def and value float mDebugESPDistance = 5.0f; @@ -48,16 +59,19 @@ public: SDK::TArray AllPlayers = {}; SDK::UPalCharacterImportanceManager* UCIM = NULL; SDK::UObject* WorldContextObject = NULL; + std::vector ToReveal = std::vector{}; int AddItemSlot = 0; int AddItemCount = 2; enum QuickItemSet { + basic_items_stackable, basic_items_single, pal_unlock_skills, spheres, - tools + tools, + starter }; //Filtered Items @@ -79,5 +93,10 @@ public: static void Init(); static void Update(const char* filterText); static const std::vector& GetFilteredItems(); + static auto timeSince(n_time::time_point start) { + n_time::time_point now = n_time::now(); + return std::chrono::duration_cast(now - start).count(); + } + }; extern config Config; diff --git a/database.h b/database.h index 7ac86f4..c586999 100644 --- a/database.h +++ b/database.h @@ -1036,6 +1036,31 @@ namespace database "Axe_Tier_02", "Axe_Tier_03", }; + static std::string starter[22] = + { + "AssaultRifle_Default5", + "AssaultRifleBullet", + "Launcher_Default_5", + "ExplosiveBullet", + "PalSphere_Debug", + "CornSoup", + "Accessory_HeatResist_3", + "Accessory_CoolResist_3", + "AutoMealPouch_Tier1", + "AutoMealPouch_Tier2", + "AutoMealPouch_Tier3", + "AutoMealPouch_Tier4", + "AutoMealPouch_Tier5", + "Lantern", + "StealArmor_5", + "StealHelmet_5", + "Shield_04", + "Pal_crystal_S", + "Wood", + "Stone", + "SkillUnlock_JetDragon", + "SkillUnlock_Anubis" + }; static std::string pal_unlock_skills[90] = { @@ -1182,5 +1207,7 @@ namespace database {"WumpoBotan", { -148826, 364859, -1831.33 }}, {"lyleen noct",{31949.71926269835 ,85551.87052192072,5397.467146487356}}, }; + static std::vector essential_items = { "Leather", "Wood", "Stone", "Fiber", "CopperOre", "Poppy", "Venom", "Wool", "Cloth", "Cloth2", "FireOrgan", "IceOrgan", "ElectricOrgan", "Pal_crystal_S", "PalCrystal_Ex", "PalFluid", "PalUpgradeStone3", "Horn", "bone", "Charcoal", "CopperIngot", "MachineParts", "GunPowder2", "PalOil", "PalItem_PlantSlime", "Coal", "Sulfur", "Polymer", "Cement", "IronIngot", "CarbonFiber", "Quartz", "MachineParts2", "StealIngot", "" }; + static std::vector ft_node_names = { "6E03F8464BAD9E458B843AA30BE1CC8F", "DDBBFFAF43D9219AE68DF98744DF0831", "603ED0CD4CFB9AFDC9E11F805594CCE5", "6282FE1E4029EDCDB14135AA4C171E4C", "9FBB93D84811BE424A37C391DBFBB476", "979BF2044C8E8FE559B598A95A83EDE3", "923B781345D2AB7ECED6BABD6E97ECE8", "16C7164C43E2B96BEDCC6696E2E592F7", "D27AFCAD472164F000D33A8D8B61FE8B", "41727100495D21DC905D309C53989914", "6DB6B7B2431CA2EFFFC88EB45805BA6A", "74270C2F45B8DCA66B6A1FAAA911D024", "DF9FB9CB41B43052A9C74FA79A826A50", "8CA5E9774FF1BBC1156ABCA09E616480", "15314BE94E2FB8D018D5749BE9A318F0", "79C561B747335A7A0A8FBF9FAE280E62", "23B9E99C4A454B99220AF7B4A58FD8DE", "A1BC65AA445619EF338E0388BC010648", "BF8B123244ADB794A06EA8A10503FBDD", "F8DF603B4C750B37D943C9AF6A911946", "596996B948716D3FD2283C8B5C6E829C", "28D514E74B51FD9EB078A891DB0787C2", "ACAE5FB04D48DE4197443E9C0993086B", "4D2F204549AB656CA1EA4B8E39C484F3", "1BDEABA240B1699541C17F83E59E61DF", "2BC5E46049E69D3549CFB58948BE3288", "91DAC6F34D2A9FD7F01471B5166C6C02", "41E36D9A4B2BA79A3AD1B7B83B16F77D", "76B000914943BADDC56BCFBAE2BF051E", "DC0ECF9241B4410C59EE619F56D1106A", "71C4B2B2407F2BBBD77572A20C7FF0F5", "EC94023A4CA571FF0FD19E90944F4231", "2A2B744B41AC79964DAE6B89CAC51FC3", "E0819EFB41581AEAC3A029B0EE2FE195", "22095BFA48A46172F8D154B2EBEB7493", "7C5E91514F6E84B0C1DEFFB52C7C4DBA", "AECFED0D41AFEE11F30B4F9687BC3243", "2EC07ACC4505CB726DE38A84246CA999", "F8E5CB8143F4FA2F6213E6B454569F87", "5F426B49469368B0C131D3A6DB8F7831", "A277AE6341EF40D84D711EA52303353F", "6231802D40C81C00445379AE238D9F90", "F6C005A14B38FE0B57F1C7869FD899CB", "7170881D44249E90902F728E240493AF", "3E8E504B4A3975FD3862E1BC85A5D4F6", "B001852C491FF5E70C4747BFF9972924", "2DE1702048A1D4A82126168C49BE51A9", "E88379634CB5B6117DA2E7B8810BFE0A", "3697999C458BF8A3C7973382969FBDF9", "65B10BB14ABDA9C2109167B21901D195", "4669582D4081BF550AFB66A05D043A3D", "FE90632845114C7FBFA4669D071E285F", "5970E8E648D2A83AFDFF7C9151D9BEF5", "B639B7ED4EE18A7AA09BA189EA703032", "099440764403D1508D9BADADF4848697", "B44AA24445864494E7569597ACCAEFC6", "3A0F123947BE045BC415C6B061A5285A", "F382ADAE4259150BF994FF873ECF242B" }; } \ No newline at end of file diff --git a/feature.cpp b/feature.cpp index 4cd82fa..29dd0d0 100644 --- a/feature.cpp +++ b/feature.cpp @@ -202,6 +202,10 @@ void SpawnMultiple_ItemsToInventory(config::QuickItemSet Set) for (int i = 0; i < IM_ARRAYSIZE(database::tools); i++) AddItemToInventoryByName(InventoryData, _strdup(database::tools[i].c_str()), 1); break; + case 5: + for (int i = 0; i < IM_ARRAYSIZE(database::starter); i++) + AddItemToInventoryByName(InventoryData, _strdup(database::starter[i].c_str()), 1); + break; default: break; } diff --git a/src/Menu.cpp b/src/Menu.cpp index c739ac5..702ff1c 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -3,6 +3,10 @@ #include "SDK.hpp" #include "config.h" #include +auto LastReveal = n_time::now(); +static auto fname_ctor = reinterpret_cast(signature("48 89 5C 24 ? 57 48 83 EC ? 41 8B F8 48 8B D9 48 85 D2").GetPointer()); + + std::string rand_str(const int len) { std::string str; @@ -130,7 +134,7 @@ namespace DX11_Base //creadit //ImGui::Checkbox("PalIsMonster", &Config.IsMonster); ImGui::InputInt("EXP:", &Config.EXP); - ImGui::InputText("Item Name", Config.ItemName,sizeof(Config.ItemName)); + ImGui::InputText("Item Name", Config.ItemName, sizeof(Config.ItemName)); ImGui::InputInt("Item Num", &Config.Item); if (ImGui::Button("Give item", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) { @@ -149,10 +153,10 @@ namespace DX11_Base ImGui::InputInt("Slot to modify (start 0):", &Config.AddItemSlot); ImGui::InputInt("Multiple of how much:", &Config.AddItemCount); - + if (ImGui::Button("Give items from slot", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) IncrementInventoryItemCountByIndex(Config.AddItemCount, Config.AddItemSlot); - + // this does not work lol // std::stringstream AddItemsString; // AddItemsString << "Give " << Config.AddItemCount << " items from slot" << Config.AddItemSlot; @@ -186,6 +190,123 @@ namespace DX11_Base } } + if (ImGui::Button("All Teleporters", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) { + SDK::APalPlayerCharacter* pPalCharacter = Config.GetPalPlayerCharacter(); + if (!pPalCharacter) + return; + + SDK::UKismetStringLibrary* lib = SDK::UKismetStringLibrary::GetDefaultObj(); + + for (int i = 0; i < database::ft_node_names.size(); i++) { + SDK::FName name{}; + fname_ctor(&name, database::ft_node_names[i].data(), 0); + ((SDK::APalPlayerState*)pPalCharacter->PlayerState)->RequestUnlockFastTravelPoint_ToServer(name); + } + + SDK::UWorld* world = Config.GetUWorld(); + if (!world) + return; + + SDK::TUObjectArray* objects = world->GObjects; + + for (int i = 0; i < objects->NumElements; ++i) { + SDK::UObject* object = objects->GetByIndex(i); + + if (!object) { + continue; + } + + if (!object->IsA(SDK::APalLevelObjectUnlockableFastTravelPoint::StaticClass())) { + continue; + } + + SDK::APalLevelObjectUnlockableFastTravelPoint* tp = (SDK::APalLevelObjectUnlockableFastTravelPoint*)object; + + if (!tp) continue; + + Config.ToReveal.push_back(tp->K2_GetActorLocation()); + } + } + if (ImGui::Button("Tech Books", ImVec2(130, 20))) { + SDK::APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (p_appc != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController() != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState() != NULL) + { + SDK::UPalPlayerInventoryData* InventoryData = Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState()->GetInventoryData(); + if (InventoryData != NULL) + AddItemToInventoryByName(InventoryData, (char*)"TechnologyBook_G3", 50); + } + } + } + } + ImGui::SameLine(); + if (ImGui::Button("Use Books (1st Slot)", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) { + SDK::APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (p_appc != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController() != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState() != NULL) + { + SDK::UPalPlayerInventoryData* InventoryData = Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState()->GetInventoryData(); + if (InventoryData != NULL) { + SDK::UPalItemContainerMultiHelper* InventoryMultiHelper = InventoryData->InventoryMultiHelper; + if (InventoryMultiHelper != NULL) { + SDK::TArray Containers = InventoryMultiHelper->Containers; + if (Containers.Count() == 0) { + return; + } + + SDK::UPalItemSlot* FirstSlot = Containers[0]->Get(0); + + if (FirstSlot != NULL) + { + SDK::FPalItemSlotId ID = FirstSlot->GetSlotId(); + for (int i = 0; i < FirstSlot->GetStackCount(); i++) + Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState()->TechnologyData->RequestAddTechnologyPointByItem(ID); + } + } + } + } + } + } + } + if (ImGui::Button("9999 Essentials")) { + SDK::APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (p_appc != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController() != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState() != NULL) + { + SDK::UPalPlayerInventoryData* InventoryData = Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState()->GetInventoryData(); + if (InventoryData != NULL) + for (int i = 0; i < database::essential_items.size(); i++) + AddItemToInventoryByName(InventoryData, (char*)database::essential_items[i].c_str(), 9999); + } + } + } + } + if (ImGui::Button("Starter Pack", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) { + SDK::APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (p_appc != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController() != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState() != NULL) + { + SDK::UPalPlayerInventoryData* InventoryData = Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPalPlayerState()->GetInventoryData(); + if (InventoryData != NULL) { + SpawnMultiple_ItemsToInventory(config::starter); + + } + } + } + } + } if (ImGui::Button("ToggleFly", ImVec2(ImGui::GetContentRegionAvail().x - 3, 20))) { Config.IsToggledFly = !Config.IsToggledFly; @@ -533,142 +654,115 @@ namespace DX11_Base void Menu::ManagerMenu() { - if (!ImGui::Begin("Manager", &g_GameVariables->m_ShowMenu, 96)) + if (ImGui::Begin("Manager", &g_GameVariables->m_ShowMenu, 96)) { - ImGui::End(); - return; - } - - - if (Config.gWorld) - { - ImGui::Checkbox("filterPlayer", &Config.filterPlayer); - SDK::TArray T = Config.GetUWorld()->PersistentLevel->Actors; - for (int i = 0; i < T.Count(); i++) + if (Config.GetUWorld() != NULL) { - if (!T[i]) - continue; + ImGui::Checkbox("Filter Characters", &Config.filterCharacters); + ImGui::SameLine(); + ImGui::Checkbox("Players", &Config.filterPlayer); + ImGui::SameLine(); + ImGui::Checkbox("Guilds", &Config.filterGuilds); + ImGui::SameLine(); + ImGui::Checkbox("Map Objects", &Config.filterMapParts); + SDK::TArray T = Config.GetUWorld()->PersistentLevel->Actors; - if (!T[i]->IsA(SDK::APalCharacter::StaticClass())) - continue; - - SDK::APalCharacter* Character = (SDK::APalCharacter*)T[i]; - SDK::FString name; - if (Config.filterPlayer) + for (int i = 0; i < T.Count(); i++) { - if (!T[i]->IsA(SDK::APalPlayerCharacter::StaticClass())) - continue; - } - if (T[i]->IsA(SDK::APalPlayerCharacter::StaticClass())) - { - if (!Character) - continue; + SDK::AActor* Actor = T[i]; - Character->CharacterParameterComponent->GetNickname(&name); - } - else - { - SDK::UKismetStringLibrary* lib = SDK::UKismetStringLibrary::GetDefaultObj(); - if (!Character) - continue; + if (Actor == nullptr) continue; - std::string s = Character->GetFullName(); - size_t firstUnderscorePos = s.find('_'); + SDK::APalCharacter* Character = (SDK::APalCharacter*)Actor; + std::string name; - if (firstUnderscorePos != std::string::npos) + bool Skip = Config.filterCharacters || Config.filterPlayer || Config.filterGuilds || Config.filterMapParts; + + if (Config.filterCharacters && Actor->IsA(SDK::APalCharacter::StaticClass())) Skip = false; + else if (Config.filterPlayer && Actor->IsA(SDK::APalPlayerCharacter::StaticClass())) Skip = false; + if (Config.filterGuilds && Actor->IsA(SDK::APalGuildInfo::StaticClass())) Skip = false; + if (Config.filterMapParts && Actor->IsA(SDK::APalMapObject::StaticClass())) Skip = false; + if (Actor->IsA(SDK::APalCaptureJudgeObject::StaticClass())) Skip = false; + + if (Skip) continue; + + if (Actor->IsA(SDK::APalPlayerCharacter::StaticClass())) { - std::string result = s.substr(firstUnderscorePos + 1); - - size_t secondUnderscorePos = result.find('_'); - - if (secondUnderscorePos != std::string::npos) { - result = result.substr(0, secondUnderscorePos); - } - wchar_t ws[255]; - swprintf(ws, 255, L"%hs", result); - name = SDK::FString(ws); + if (!Character) { continue; } + SDK::FString fn; + Character->CharacterParameterComponent->GetNickname(&fn); + if (fn.IsValid()) + name = fn.ToString(); + else + name = "unknown"; } - } - ImGui::Text(name.ToString().c_str()); - ImGui::SameLine(); - ImGui::PushID(i); - if (ImGui::Button("Kill")) - { - if (T[i]->IsA(SDK::APalCharacter::StaticClass())) - Damage(Character, 99999999999); - } - ImGui::SameLine(); - if (ImGui::Button("TP")) - { - if (Config.GetPalPlayerCharacter() != NULL) + else if (Actor->IsA(SDK::APalGuildInfo::StaticClass())) + name = Character->Name.GetRawString() + "[]" + ((SDK::APalGuildInfo*)Actor)->Guild->GuildName.ToString(); + else + name = Character->Name.GetRawString(); + ImGui::PushID(i); + if (ImGui::Button("TP")) { - if (Character) + if (Config.GetPalPlayerCharacter() != NULL) { + if (!Character) { continue; } SDK::FVector vector = Character->K2_GetActorLocation(); AnyWhereTP(vector, Config.IsSafe); } } - } - /*if (Character->IsA(SDK::APalPlayerCharacter::StaticClass())) - { - ImGui::SameLine(); - if (ImGui::Button("Boss")) + if (Actor->IsA(SDK::APalCharacter::StaticClass())) { + ImGui::SameLine(); + if (ImGui::Button(GetAsyncKeyState(VK_LSHIFT) ? "-99%" : "Kill")) + Damage(Character, GetAsyncKeyState(VK_LSHIFT) ? (Character->CharacterParameterComponent->GetHP().Value - 1) / 1000 : 99999999999); + } + + if (Actor->IsA(SDK::APalPlayerCharacter::StaticClass())) { + ImGui::SameLine(); + if (ImGui::Button("Join Guild")) { + SDK::FGuid guid1 = Config.GetPalPlayerCharacter()->GetPalPlayerController()->GetPlayerUId(); + SDK::FGuid guid2; + + guid2 = SDK::UPalUtility::GetDefaultObj()->GetPlayerUIDByActor(Actor); + + g_Console->printdbg("\n\n[+] Player 1 GUID: %x\nPlayer 2 GUID: %x [+]\n\n", g_Console->green, guid1, guid2); + + Config.GetPalPlayerCharacter()->GetPalPlayerController()->Transmitter->Group->RequestJoinGuildForPlayer_ToServer(guid1, guid2); + } + } + if (Actor->IsA(SDK::APalMapLevelObject::StaticClass())) { + ImGui::SameLine(); + if (ImGui::Button("Destroy")) { + SDK::APalMapLevelObject* Object = (SDK::APalMapLevelObject*)Actor; + + Config.GetPalPlayerCharacter()->GetPalPlayerController()->Transmitter->MapObject->RequestDismantleObject_ToServer(Object->LevelObjectInstanceId); + } + } + if (Character->IsA(SDK::APalPlayerCharacter::StaticClass())) { - if (Config.GetPalPlayerCharacter() != NULL) + ImGui::SameLine(); + if (ImGui::Button("Steal Name")) { - auto controller = Config.GetPalPlayerCharacter()->GetPalPlayerController(); - if (controller != NULL) + if (Config.GetPalPlayerCharacter() != NULL) { - controller->Transmitter->BossBattle->RequestBossBattleEntry_ToServer(SDK::EPalBossType::ElectricBoss, (SDK::APalPlayerCharacter*)Character); - controller->Transmitter->BossBattle->RequestBossBattleStart_ToServer(SDK::EPalBossType::ElectricBoss, (SDK::APalPlayerCharacter*)Character); + auto controller = Config.GetPalPlayerCharacter()->GetPalPlayerController(); + if (controller != NULL) + { + auto player = (SDK::APalPlayerCharacter*)Character; + SDK::FString fakename; + player->CharacterParameterComponent->GetNickname(&fakename); + Config.GetPalPlayerCharacter()->GetPalPlayerController()->Transmitter->NetworkIndividualComponent->UpdateCharacterNickName_ToServer(Config.GetPalPlayerCharacter()->CharacterParameterComponent->IndividualHandle->ID, fakename); + } } } } - }*/ - if (Character->IsA(SDK::APalPlayerCharacter::StaticClass())) - { ImGui::SameLine(); - if (ImGui::Button("MaskIt")) - { - if (Config.GetPalPlayerCharacter() != NULL) - { - auto controller = Config.GetPalPlayerCharacter()->GetPalPlayerController(); - if (controller != NULL) - { - auto player = (SDK::APalPlayerCharacter*)Character; - SDK::FString fakename; - player->CharacterParameterComponent->GetNickname(&fakename); - Config.GetPalPlayerCharacter()->GetPalPlayerController()->Transmitter->NetworkIndividualComponent->UpdateCharacterNickName_ToServer(Config.GetPalPlayerCharacter()->CharacterParameterComponent->IndividualHandle->ID, fakename); - } - } - } + ImGui::Text(name.c_str()); + + ImGui::PopID(); } - if (Character->IsA(SDK::APalPlayerCharacter::StaticClass())) - { - ImGui::SameLine(); - if (ImGui::Button("Boss")) - { - if (Config.GetPalPlayerCharacter() != NULL) - { - auto controller = Config.GetPalPlayerCharacter()->GetPalPlayerController(); - if (controller != NULL) - { - controller->Transmitter->BossBattle->RequestBossBattleEntry_ToServer(SDK::EPalBossType::ElectricBoss, (SDK::APalPlayerCharacter*)Character); - controller->Transmitter->BossBattle->RequestBossBattleStart_ToServer(SDK::EPalBossType::ElectricBoss, (SDK::APalPlayerCharacter*)Character); - } - } - } - } - ImGui::PopID(); } - } - - if (Config.GetUWorld() != NULL) - { - } - ImGui::End(); } @@ -795,6 +889,31 @@ namespace DX11_Base void Menu::Loops() { + if ((GetAsyncKeyState(VK_OEM_3) && GetAsyncKeyState(0x52) & 1)) + { + if (Config.GetUWorld() != NULL) + { + SDK::TArray T = Config.GetUWorld()->PersistentLevel->Actors; + + for (int i = 0; i < T.Count(); i++) + { + SDK::AActor* Actor = T[i]; + + if (Actor == nullptr) continue; + if (!Actor->IsA(SDK::APalCharacter::StaticClass())) continue; + if (Actor->IsA(SDK::APalPlayerCharacter::StaticClass())) continue; + + SDK::APalCharacter* Character = (SDK::APalCharacter*)Actor; + + if (Character->IsLocallyControlled()) continue; + + if (Character->CharacterParameterComponent->GetHP().Value < Character->CharacterParameterComponent->GetMaxHP().Value * 0.015) continue; + + Damage(Character, (Character->CharacterParameterComponent->GetHP().Value - 1) / 1000); + } + } + } + // Respawn if ((GetAsyncKeyState(VK_F5) & 1)) RespawnLocalPlayer(Config.IsSafe); @@ -803,7 +922,18 @@ namespace DX11_Base if ((GetAsyncKeyState(VK_F6) & 1)) ReviveLocalPlayer(); - // + if ((GetAsyncKeyState(VK_F3) & 1)) + { + SDK::APalPlayerCharacter* p_appc = Config.GetPalPlayerCharacter(); + if (p_appc != NULL) + { + if (Config.GetPalPlayerCharacter()->GetPalPlayerController() != NULL) + { + Config.spec = !Config.spec; + Config.GetPalPlayerCharacter()->SetSpectatorMode(Config.spec); + } + } + } if (Config.IsSpeedHack) SpeedHack(Config.SpeedModiflers); @@ -818,7 +948,14 @@ namespace DX11_Base // if (Config.IsInfStamina) ResetStamina(); + if (!Config.ToReveal.empty() && Config.timeSince(LastReveal) > 100) { + LastReveal = n_time::now(); + SDK::FVector pos = Config.ToReveal.back(); + SDK::FHitResult _; + Config.ToReveal.pop_back(); + Config.GetPalPlayerCharacter()->K2_SetActorLocation(pos, false, &_, true); + } // // SetDemiGodMode(Config.IsMuteki); }