#include "Hooks.h" #include "W2S.h" #include "CRC.h" extern Vector4D_t Get2DBox(Vector_t WorldPosition, const float Height); extern VOID Recoil(CCSGOInput* Input); extern VOID TriggerBot(CCSGOInput* pInput); static const std::unordered_map ClassTrimMap = { {"C_Knife", 2}, {"C_Weapon", 8}, {"C_DEagle", 2}, {"C_Flashbang", 2}, {"C_SmokeGrenade", 2}, {"C_HEGrenade", 2}, {"C_IncendiaryGrenade", 2}, {"C_DecoyGrenade", 2}, {"C_WeaponSCAR20", 8}, {"C_C4", 2}, {"C_AK47", 2}, {"C_MolotovGrenade", 2}, {"C_PlantedC4", 9}, {"CBaseAnimGraph", 0} }; inline void PlayerEntities(C_BaseEntity* pEntity, SchemaClassInfoData_t* pClassInfo, CCSGOInput* pInput) { if (FNV1A::Hash(pClassInfo->szName) != FNV1A::HashConst("CCSPlayerController")) return; CCSPlayerController* Controller = reinterpret_cast(pEntity); if (Controller == nullptr || Controller->IsLocalPlayerController()) return; C_CSPlayerPawn* Pawn = I::GameResourceService->pGameEntitySystem->Get(Controller->GetPawnHandle()); if (Pawn == nullptr) return; if (Pawn->GetHealth() == 0 && !Controller->IsPawnAlive()) return; if (!Pawn->IsOtherEnemy()) return; CGameSceneNode* GameSceneNode = Pawn->GetGameSceneNode(); if (GameSceneNode == nullptr) return; CSkeletonInstance* Skeleton = GameSceneNode->GetSkeletonInstance(); if (Skeleton == nullptr) return; C_CSWeaponBase* CSWeaponBase = Pawn->CSWeaponBase(); if (CSWeaponBase == nullptr) return; CBoneData Bones; PlayerEntity Entity; Entity.Controller.m_sSanitizedPlayerName = Controller->GetPlayerName(); Entity.Pawn.Health = Pawn->GetHealth(); Entity.Pawn.m_vOldOrigin = Pawn->GetOrigin(); Entity.Pawn.isVisible = Pawn->EyeVisible(SDK::LocalPawn, Pawn); Entity.Pawn.CSWeaponBase = CSWeaponBase; Entity.Pawn.Rectangle = Get2DBox(Entity.Pawn.m_vOldOrigin, 75.0f); Entity.Pawn.BoneData.BonePositions.clear(); Entity.Pawn.BoneData.BonePositions.resize(104); for (const auto& BoneList : BoneJointList::List) { for (const auto& BoneIndex : BoneList) { if (BoneIndex >= Entity.Pawn.BoneData.BonePositions.size()) continue; GetBone(Skeleton, Bones, BoneIndex); BonePosition Position; Position.Location = Bones.Location; Position.WorldVisible = View.WorldToScreen(Bones.Location, Position.ScreenPosition); Position.RayTraceVisible = Pawn->BoneVisible(SDK::LocalPawn, Pawn, Position.Location); Entity.Pawn.BoneData.BonePositions[BoneIndex] = Position; } } Entity.CanHit = Pawn->TriggerHit(SDK::LocalPawn, Pawn, pInput, Entity.Pawn.BoneData); NextPlayerList->push_back(Entity); } inline VOID WeaponEntities(C_BaseEntity* pEntity, SchemaClassInfoData_t* pClassInfo) { std::string ClassName = pClassInfo->szName; for (const auto& [key, trimLength] : ClassTrimMap) { if (ClassName.find(key) != std::string::npos) { ClassName = ClassName.substr(trimLength); cWeaponEntity->Name = ClassName; C_CSWeaponBase* CSWeaponBase = reinterpret_cast(pEntity); if (CSWeaponBase == nullptr) return; CGameSceneNode* GameSceneNode = CSWeaponBase->GetGameSceneNode(); if (GameSceneNode == nullptr) return; cWeaponEntity->isWeapon = CSWeaponBase->IsWeapon(); cWeaponEntity->WorldPosition = GameSceneNode->GetOrigin(); cWeaponEntity->CSWeaponBase = CSWeaponBase; NextWeaponList->push_back(*cWeaponEntity); } } } inline VOID ChickenEntities(C_BaseEntity* pEntity, SchemaClassInfoData_t* pClassInfo) { if (FNV1A::Hash(pClassInfo->szName) != FNV1A::HashConst("C_Chicken")) return; C_Chicken* CChicken = reinterpret_cast(pEntity); if (CChicken == nullptr) return; CGameSceneNode* GameSceneNode = CChicken->GetGameSceneNode(); if (GameSceneNode == nullptr) return; CurrentChickenEntity->Chicken.Name = "Chicken"; CurrentChickenEntity->Chicken.WorldPosition = GameSceneNode->GetOrigin(); CurrentChickenEntity->Chicken.isVisible = CChicken->ChickenVisible(SDK::LocalPawn, CChicken); CurrentChickenEntity->Chicken.Rectangle = Get2DBox(CurrentChickenEntity->Chicken.WorldPosition, 25.0f); NextChickenList->push_back(*CurrentChickenEntity); } inline VOID InfernoEntities(C_BaseEntity* pEntity, SchemaClassInfoData_t* pClassInfo) { if (FNV1A::Hash(pClassInfo->szName) != FNV1A::HashConst("C_Inferno")) return; C_Inferno* Molotov = reinterpret_cast(pEntity); if (Molotov == nullptr) return; int EntityID = reinterpret_cast(pEntity); if (Molotov->IsBurning()) { auto& Entity = ActiveInfernoEntities[EntityID]; Entity.Inferno.WorldPosition = Molotov->GetFirePositions(); Entity.Inferno.Base = Molotov; if (Entity.StartTime == std::chrono::steady_clock::time_point()) { Entity.StartTime = std::chrono::steady_clock::now(); Entity.UniqueInfernoID = NextInfernoID++; } } else { ActiveInfernoEntities.erase(EntityID); return; } } VOID SkyBox(C_EnvSky* eSky) { if (MenuConfig::LightChanger == false || eSky == nullptr) return; eSky->m_vTintColorLightingOnly() = Color_t( MenuConfig::g_SkyboxColor.x * 255.f, MenuConfig::g_SkyboxColor.y * 255.f, MenuConfig::g_SkyboxColor.z * 255.f, MenuConfig::g_SkyboxColor.w * 255.f ); eSky->m_vTintColor() = Color_t( MenuConfig::g_SkyboxColor.x * 255.f, MenuConfig::g_SkyboxColor.y * 255.f, MenuConfig::g_SkyboxColor.z * 255.f, MenuConfig::g_SkyboxColor.w * 255.f ); OriginalUpdateSkybox(eSky); } VOID SmokeColor(C_SmokeGrenadeProjectile* Smoke) { if (MenuConfig::EnableSmokeColor && Smoke != nullptr) Smoke->m_vSmokeColor() = MenuConfig::SmokeColorPicker; } bool __fastcall hkCreateMove(CCSGOInput* pInput, int nSlot, bool bActive) { NextPlayerList->clear(), NextWeaponList->clear(), NextChickenList->clear(); const bool bResult = FakeReturnAddress(Offsets->GameData.ReturnAddress, CreateMove, pInput, nSlot, bActive); if (!I::Engine->IsConnected() || !I::Engine->IsInGame()) return bResult; SDK::LocalController = CCSPlayerController::GetLocalPlayerController(); if (SDK::LocalController == nullptr) return bResult; SDK::LocalPawn = I::GameResourceService->pGameEntitySystem->Get(SDK::LocalController->GetPawnHandle()); if (SDK::LocalPawn == nullptr) return bResult; CUserCmd* pCmd = pInput->GetUserCmd(); if (pCmd == nullptr) return bResult; SDK::Cmd = pCmd; CBaseUserCmdPB* pBaseCmd = pCmd->csgoUserCmd.pBaseCmd; if (pBaseCmd == nullptr) return bResult; for (int nIndex = 1; nIndex <= I::GameResourceService->pGameEntitySystem->GetHighestEntityIndex(); nIndex++) { C_BaseEntity* pEntity = I::GameResourceService->pGameEntitySystem->Get(nIndex); if (pEntity == nullptr) continue; pEntity->GetSchemaClassInfo(&pClassInfo); if (pClassInfo == nullptr) continue; PlayerEntities(pEntity, pClassInfo, pInput); WeaponEntities(pEntity, pClassInfo); ChickenEntities(pEntity, pClassInfo); InfernoEntities(pEntity, pClassInfo); if (FNV1A::Hash(pClassInfo->szName) == FNV1A::HashConst("C_EnvSky")) g_pEnvSky = reinterpret_cast(pEntity); if (FNV1A::Hash(pClassInfo->szName) == FNV1A::HashConst("C_SmokeGrenadeProjectile")) g_pSmokeGrenadeProjectile = reinterpret_cast(pEntity); } std::swap(CurrentPlayerList, NextPlayerList), std::swap(CurrentWeaponList, NextWeaponList), std::swap(CurrentChickenList, NextChickenList); SkyBox(g_pEnvSky); SmokeColor(g_pSmokeGrenadeProjectile); if (SDK::LocalPawn->GetHealth() > 0 && SDK::LocalController->IsPawnAlive()) { SilentAim(pCmd); Aimbot(pInput); Recoil(pInput); TriggerBot(pInput); } CRC::Save(SDK::Cmd->csgoUserCmd.pBaseCmd); if (CRC::CalculateCRC(SDK::Cmd->csgoUserCmd.pBaseCmd) == true) CRC::Apply(SDK::Cmd); return bResult; } void __fastcall hkLightingModulation(__int64 a1, cAggregateSceneObject* SceneObject, __int64 a3) { SceneObject->R = MenuConfig::wModulation.LightingColor.x * MenuConfig::wModulation.LightingIntensity; SceneObject->G = MenuConfig::wModulation.LightingColor.y * MenuConfig::wModulation.LightingIntensity; SceneObject->B = MenuConfig::wModulation.LightingColor.z * MenuConfig::wModulation.LightingIntensity; return oLightingModulation(a1, SceneObject, a3); }