From b95e5645691713c2157c5a377d192e0c7748df2a Mon Sep 17 00:00:00 2001 From: BenCat07 Date: Mon, 21 May 2018 11:54:08 +0200 Subject: [PATCH] B1g update regarding lagbots and backtrack --- CMakeLists.txt | 1 + include/MiscTemporary.hpp | 2 + include/config.h.in | 3 +- include/hacks/AutoJoin.hpp | 2 +- include/hacks/Backtrack.hpp | 15 ++- include/hacks/CMakeLists.txt | 10 +- include/hacks/hacklist.hpp | 11 +- include/tfmm.hpp | 1 + src/MiscTemporary.cpp | 6 +- src/hack.cpp | 13 ++- src/hacks/Aimbot.cpp | 45 ++++---- src/hacks/AutoJoin.cpp | 2 + src/hacks/Backtrack.cpp | 186 ++++++++++++++++-------------- src/hacks/CMakeLists.txt | 13 ++- src/hacks/ESP.cpp | 17 +-- src/hacks/FollowBot.cpp | 5 +- src/hacks/Misc.cpp | 2 + src/hacks/Radar.cpp | 12 +- src/helpers.cpp | 18 +-- src/hooks/CreateMove.cpp | 47 ++++++-- src/hooks/DispatchUserMessage.cpp | 6 +- src/hooks/LevelInit.cpp | 6 + src/hooks/LevelShutdown.cpp | 6 +- src/hooks/Paint.cpp | 4 +- src/hooks/Shutdown.cpp | 6 +- src/ipc.cpp | 2 +- src/tfmm.cpp | 25 ++-- src/visual/drawmgr.cpp | 4 +- src/visual/menu/ncc/Menu.cpp | 1 + src/votelogger.cpp | 31 +++-- 30 files changed, 314 insertions(+), 188 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ad2c737..9672f56f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ set_property(CACHE Game PROPERTY STRINGS ${GameValues}) set(EnableVisuals 1 CACHE BOOL "Enable Visuals") +set(LagbotMode 0 CACHE BOOL "Build light cathook made for lagbots") set(ExternalDrawing 0 CACHE BOOL "External Visuals") set(EnableGUI 1 CACHE BOOL "Enable GUI") set(EnableIPC 1 CACHE BOOL "Enable IPC") diff --git a/include/MiscTemporary.hpp b/include/MiscTemporary.hpp index b45e9380..f0d3d920 100644 --- a/include/MiscTemporary.hpp +++ b/include/MiscTemporary.hpp @@ -28,6 +28,8 @@ extern CatVar engine_pred; extern Timer DelayTimer; extern CatVar delay; extern CatVar adjust; +extern float prevflow; +extern int prevflowticks; #if ENABLE_VISUALS extern int spectator_target; extern CLC_VoiceData *voicecrash; diff --git a/include/config.h.in b/include/config.h.in index bfe053d3..0d3fcffc 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -6,6 +6,7 @@ #define GAME_SPECIFIC @GameSpecific@ #define GAME @Game@ #define ENABLE_VISUALS @EnableVisuals@ +#define LAGBOT_MODE @LagbotMode@ #define EXTERNAL_DRAWING @ExternalDrawing@ #define ENABLE_GUI @EnableGUI@ #define ENABLE_IPC @EnableIPC@ @@ -13,4 +14,4 @@ #define ENABLE_VAC_BYPASS @VACBypass@ #define ENABLE_TEXTMODE_STDIN @EnableTextmodeStdin@ #define ENABLE_NULL_GRAPHICS @EnableNullGraphics@ -#define TEXTMODE @Textmode@ \ No newline at end of file +#define TEXTMODE @Textmode@ diff --git a/include/hacks/AutoJoin.hpp b/include/hacks/AutoJoin.hpp index 814bb264..419b724c 100755 --- a/include/hacks/AutoJoin.hpp +++ b/include/hacks/AutoJoin.hpp @@ -6,7 +6,7 @@ */ #pragma once - +#include "common.hpp" namespace hacks { namespace shared diff --git a/include/hacks/Backtrack.hpp b/include/hacks/Backtrack.hpp index ac1b678e..11c816f0 100644 --- a/include/hacks/Backtrack.hpp +++ b/include/hacks/Backtrack.hpp @@ -8,18 +8,21 @@ #pragma once #include "common.hpp" -namespace hacks { -namespace shared { -namespace backtrack { +namespace hacks +{ +namespace shared +{ +namespace backtrack +{ struct BacktrackData { - int tickcount; - Vector hitboxpos; + int tickcount; + Vector hitboxpos; }; void Init(); void Run(); void Draw(); -extern BacktrackData headPositions[24][12]; +extern BacktrackData headPositions[24][13]; } } } diff --git a/include/hacks/CMakeLists.txt b/include/hacks/CMakeLists.txt index a6903775..8de6a98b 100644 --- a/include/hacks/CMakeLists.txt +++ b/include/hacks/CMakeLists.txt @@ -1,3 +1,8 @@ +target_sources(cathook PRIVATE + "${CMAKE_CURRENT_LIST_DIR}/AutoJoin.hpp" + "${CMAKE_CURRENT_LIST_DIR}/CatBot.hpp" + "${CMAKE_CURRENT_LIST_DIR}/Spam.hpp") +if(NOT LagbotMode) target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/Achievement.hpp" "${CMAKE_CURRENT_LIST_DIR}/Aimbot.hpp" @@ -30,7 +35,8 @@ target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/UberSpam.hpp" "${CMAKE_CURRENT_LIST_DIR}/Walkbot.hpp" "${CMAKE_CURRENT_LIST_DIR}/Radar.hpp") - + add_subdirectory(ac) +endif() if(EnableVisuals) target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/ESP.hpp" @@ -40,5 +46,3 @@ target_sources(cathook PRIVATE endif() target_include_directories(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}") - -add_subdirectory(ac) \ No newline at end of file diff --git a/include/hacks/hacklist.hpp b/include/hacks/hacklist.hpp index e11d9e8d..6cce8828 100755 --- a/include/hacks/hacklist.hpp +++ b/include/hacks/hacklist.hpp @@ -17,7 +17,7 @@ #include "SpyAlert.hpp" #endif - +#if not LAGBOT_MODE #include "Aimbot.hpp" #include "AntiAim.hpp" #include "AntiDisguise.hpp" @@ -29,11 +29,15 @@ #include "AutoDeadringer.hpp" #include "Bunnyhop.hpp" #include "LagExploit.hpp" +#endif #if ENABLE_VISUALS #include "Radar.hpp" #endif +#if not LAGBOT_MODE #include "Walkbot.hpp" +#endif #include "AutoJoin.hpp" +#if not LAGBOT_MODE #include "AntiBackstab.hpp" #include "AutoBackstab.hpp" #include "FollowBot.hpp" @@ -43,10 +47,15 @@ #include "KillSay.hpp" #include "UberSpam.hpp" #include "Achievement.hpp" +#endif #include "Spam.hpp" +#if not LAGBOT_MODE #include "Noisemaker.hpp" #include "FollowBot.hpp" #include "Announcer.hpp" #include "Killstreak.hpp" +#endif #include "CatBot.hpp" +#if not LAGBOT_MODE #include "Backtrack.hpp" +#endif diff --git a/include/tfmm.hpp b/include/tfmm.hpp index 2d289d3f..b786a79b 100755 --- a/include/tfmm.hpp +++ b/include/tfmm.hpp @@ -12,5 +12,6 @@ namespace tfmm void queue_start(); void queue_leave(); +void dcandabandon(); void abandon(); } diff --git a/src/MiscTemporary.cpp b/src/MiscTemporary.cpp index 751a6c28..df492bfb 100644 --- a/src/MiscTemporary.cpp +++ b/src/MiscTemporary.cpp @@ -39,5 +39,7 @@ Timer DelayTimer{}; CatVar delay( CV_INT, "delay", "0", "Delay", "Delay actions like chat spam and serverlag/crash by this many seconds."); -CatVar adjust(CV_SWITCH, "serverlag_ramp", "0", "Ramp lag", - "increase lag while packet loss is below 80%"); +CatVar adjust(CV_INT, "serverlag_ramp", "0", "Ramp lag", + "keep lag around this many seconds"); +float prevflow = 0.0f; +int prevflowticks = 0; diff --git a/src/hack.cpp b/src/hack.cpp index a9958bf4..bfeb2706 100644 --- a/src/hack.cpp +++ b/src/hack.cpp @@ -8,6 +8,7 @@ #include #include "hack.hpp" #include "common.hpp" +#include "MiscTemporary.hpp" #include @@ -381,11 +382,12 @@ free(logname);*/ // hooks::materialsystem.HookMethod(); } #endif - +#if not LAGBOT_MODE // FIXME [MP] hacks::shared::killsay::Init(); hacks::shared::announcer::init(); hacks::tf2::killstreak::init(); +#endif hacks::shared::catbot::init(); logging::Info("Hooked!"); velocity::Init(); @@ -416,10 +418,10 @@ free(logname);*/ g_IGameEventManager->AddListener(&adv_event_listener, false); #endif /* TEXTMODE */ - +#if not LAGBOT_MODE hacks::shared::anticheat::Init(); hacks::tf2::healarrow::Init(); - +#endif #if ENABLE_VISUALS #ifndef FEATURE_FIDGET_SPINNER_ENABLED InitSpinner(); @@ -429,8 +431,9 @@ free(logname);*/ backpacktf::init(); logging::Info("Initialized Backpack.TF integration"); #endif - +#if not LAGBOT_MODE hacks::shared::walkbot::Initialize(); +#endif #if ENABLE_VISUALS hacks::shared::esp::Init(); #endif @@ -467,8 +470,10 @@ void hack::Shutdown() #endif logging::Info("Unregistering convars.."); ConVar_Unregister(); +#if not LAGBOT_MODE logging::Info("Shutting down killsay..."); hacks::shared::killsay::Shutdown(); hacks::shared::announcer::shutdown(); +#endif logging::Info("Success.."); } diff --git a/src/hacks/Aimbot.cpp b/src/hacks/Aimbot.cpp index 557a4d22..faadc02c 100644 --- a/src/hacks/Aimbot.cpp +++ b/src/hacks/Aimbot.cpp @@ -33,7 +33,7 @@ static CatVar aimkey_mode(aimkey_modes_enum, "aimbot_aimkey_mode", "1", static CatVar autoshoot(CV_SWITCH, "aimbot_autoshoot", "1", "Autoshoot", "Shoot automatically when the target is locked, isn't " "compatible with 'Enable when attacking'"); -static CatVar multipoint(CV_SWITCH, "aimbot_multipoint", "1", "Multipoint", +static CatVar multipoint(CV_SWITCH, "aimbot_multipoint", "0", "Multipoint", "Multipoint aimbot"); static CatEnum hitbox_mode_enum({ "AUTO", "AUTO-CLOSEST", "STATIC" }); static CatVar hitbox_mode(hitbox_mode_enum, "aimbot_hitboxmode", "0", @@ -207,9 +207,10 @@ void CreateMove() return; if (!g_IEntityList->GetClientEntity(target_entity->m_IDX)) - return; - if (!target_entity->hitboxes.GetHitbox(calculated_data_array[target_entity->m_IDX].hitbox)) - return; + return; + if (!target_entity->hitboxes.GetHitbox( + calculated_data_array[target_entity->m_IDX].hitbox)) + return; // Auto-zoom IF_GAME(IsTF()) { @@ -705,12 +706,12 @@ void Aim(CachedEntity *entity) float minx, maxx, miny, maxy, minz, maxz, centerx, centery, centerz; auto hitbox = entity->hitboxes.GetHitbox(cd.hitbox); // get positions - minx = hitbox->min.x; - miny = hitbox->min.y; - maxx = hitbox->max.x; - maxy = hitbox->max.y; - minz = hitbox->min.z; - maxz = hitbox->max.z; + minx = hitbox->min.x; + miny = hitbox->min.y; + maxx = hitbox->max.x; + maxy = hitbox->max.y; + minz = hitbox->min.z; + maxz = hitbox->max.z; centerx = hitbox->center.x; centery = hitbox->center.y; centerz = hitbox->center.z; @@ -724,18 +725,18 @@ void Aim(CachedEntity *entity) maxz -= (maxz - minz) / 6; minz += (maxz - minz) / 6; // Create Vectors - positions.push_back({minx, centery, minz}); - positions.push_back({maxx, centery, minz}); - positions.push_back({minx, centery, maxz}); - positions.push_back({maxx, centery, maxz}); - positions.push_back({centerx, miny, minz}); - positions.push_back({centerx, maxy, minz}); - positions.push_back({centerx, miny, maxz}); - positions.push_back({centerx, maxy, maxz}); - positions.push_back({minx, miny, centerz}); - positions.push_back({maxx, maxy, centerz}); - positions.push_back({minx, miny, centerz}); - positions.push_back({maxx, maxy, centerz}); + positions.push_back({ minx, centery, minz }); + positions.push_back({ maxx, centery, minz }); + positions.push_back({ minx, centery, maxz }); + positions.push_back({ maxx, centery, maxz }); + positions.push_back({ centerx, miny, minz }); + positions.push_back({ centerx, maxy, minz }); + positions.push_back({ centerx, miny, maxz }); + positions.push_back({ centerx, maxy, maxz }); + positions.push_back({ minx, miny, centerz }); + positions.push_back({ maxx, maxy, centerz }); + positions.push_back({ minx, miny, centerz }); + positions.push_back({ maxx, maxy, centerz }); positions.push_back(hitbox->center); for (auto pos : positions) if (IsVectorVisible(g_pLocalPlayer->v_Eye, pos)) diff --git a/src/hacks/AutoJoin.cpp b/src/hacks/AutoJoin.cpp index e2985e94..f60bbf6a 100644 --- a/src/hacks/AutoJoin.cpp +++ b/src/hacks/AutoJoin.cpp @@ -102,6 +102,7 @@ void UpdateSearch() Timer timer{}; void Update() { +#if not LAGBOT_MODE if (timer.test_and_set(500)) { if (autojoin_team and UnassignedTeam()) @@ -116,6 +117,7 @@ void Update() .c_str()); } } +#endif } } } diff --git a/src/hacks/Backtrack.cpp b/src/hacks/Backtrack.cpp index f2e9a208..a49af001 100644 --- a/src/hacks/Backtrack.cpp +++ b/src/hacks/Backtrack.cpp @@ -7,128 +7,146 @@ #include "common.hpp" #include "Backtrack.hpp" -namespace hacks { -namespace shared { -namespace backtrack { -CatVar enable(CV_SWITCH, "backtrack", "0", "Enable backtrack", "For legit play only as of right now."); -BacktrackData headPositions[24][12]; +namespace hacks +{ +namespace shared +{ +namespace backtrack +{ +CatVar enable(CV_SWITCH, "backtrack", "0", "Enable backtrack", + "For legit play only as of right now."); +extern CatVar draw_bt(CV_SWITCH, "backtrack_draw", "0", "Draw", "Draw backtrack ticks"); +BacktrackData headPositions[24][13]; //======================================================================= inline float distance_point_to_line(Vector Point, Vector LineOrigin, Vector Dir) { - auto PointDir = Point - LineOrigin; + auto PointDir = Point - LineOrigin; - auto TempOffset = PointDir.Dot(Dir) / (Dir.x*Dir.x + Dir.y*Dir.y + Dir.z*Dir.z); - if (TempOffset < 0.000001f) - return FLT_MAX; + auto TempOffset = + PointDir.Dot(Dir) / (Dir.x * Dir.x + Dir.y * Dir.y + Dir.z * Dir.z); + if (TempOffset < 0.000001f) + return FLT_MAX; - auto PerpendicularPoint = LineOrigin + (Dir * TempOffset); + auto PerpendicularPoint = LineOrigin + (Dir * TempOffset); - return (Point - PerpendicularPoint).Length(); + return (Point - PerpendicularPoint).Length(); } inline Vector angle_vector(Vector meme) { - auto sy = sin(meme.y / 180.f * static_cast(PI)); - auto cy = cos(meme.y / 180.f * static_cast(PI)); + auto sy = sin(meme.y / 180.f * static_cast(PI)); + auto cy = cos(meme.y / 180.f * static_cast(PI)); - auto sp = sin(meme.x / 180.f * static_cast(PI)); - auto cp = cos(meme.x / 180.f* static_cast(PI)); + auto sp = sin(meme.x / 180.f * static_cast(PI)); + auto cp = cos(meme.x / 180.f * static_cast(PI)); - return Vector(cp*cy, cp*sy, -sp); + return Vector(cp * cy, cp * sy, -sp); } //======================================================================= void Init() { - for (auto a : headPositions) - { - a->hitboxpos = {0,0,0}; - a->tickcount = 0; - } + for (auto a : headPositions) + { + a->hitboxpos = { 0, 0, 0 }; + a->tickcount = 0; + } } +bool disabled = true; void Run() { - if (!enable) - return; - CUserCmd *cmd = g_pUserCmd; - int iBestTarget = -1; - float bestFov = 99999; + if (!enable) + { + if (!disabled) + Init(); + disabled = true; + return; + } + disabled = true; + CUserCmd *cmd = g_pUserCmd; + int iBestTarget = -1; + float bestFov = 99999; - if (CE_BAD(LOCAL_E)) - return; + if (CE_BAD(LOCAL_E)) + return; - for (int i = 1; i <= g_IEngine->GetMaxClients(); i++) - { - CachedEntity* pEntity = ENTITY(i); + for (int i = 1; i <= g_IEngine->GetMaxClients(); i++) + { + CachedEntity *pEntity = ENTITY(i); - if (CE_BAD(pEntity)) - continue; - if (!pEntity->m_bAlivePlayer) - { - for (int j = 0; j < 13; j++) { - headPositions[i][j].hitboxpos = {0,0,0}; - headPositions[i][j].tickcount = 0; - } - continue; - } - if (pEntity->m_iTeam == LOCAL_E->m_iTeam) - continue; + if (CE_BAD(pEntity)) + continue; + if (!pEntity->m_bAlivePlayer) + { + for (int j = 0; j < 13; j++) + { + headPositions[i][j].hitboxpos = { 0, 0, 0 }; + headPositions[i][j].tickcount = 0; + } + continue; + } + if (pEntity->m_iTeam == LOCAL_E->m_iTeam) + continue; - Vector hitboxpos = pEntity->hitboxes.GetHitbox(0)->center; - headPositions[i][cmd->command_number % 13] = BacktrackData{ cmd->tick_count, hitboxpos }; + Vector hitboxpos = pEntity->hitboxes.GetHitbox(0)->center; + headPositions[i][cmd->command_number % 13] = + BacktrackData{ cmd->tick_count, hitboxpos }; - Vector ViewDir = angle_vector(cmd->viewangles); - float FOVDistance = distance_point_to_line(hitboxpos, g_pLocalPlayer->v_Eye, ViewDir); + Vector ViewDir = angle_vector(cmd->viewangles); + float FOVDistance = + distance_point_to_line(hitboxpos, g_pLocalPlayer->v_Eye, ViewDir); - if (bestFov > FOVDistance) - { - bestFov = FOVDistance; - iBestTarget = i; - } + if (bestFov > FOVDistance) + { + bestFov = FOVDistance; + iBestTarget = i; + } - if (iBestTarget != -1) - { - int bestTick = 0; - float tempFOV = 9999; - float bestFOV = 30; - Vector lowestDistTicks(180, 180, 0); - for (int t = 0; t < 12; ++t) - { - Vector ViewDir = angle_vector(cmd->viewangles); - float tempFOV = distance_point_to_line(headPositions[iBestTarget][t].hitboxpos, g_pLocalPlayer->v_Eye, ViewDir); - if (bestFOV > tempFOV) - bestTick = t, bestFOV = tempFOV; - } - - if (cmd->buttons & IN_ATTACK) - cmd->tick_count = headPositions[i][bestTick].tickcount; - } - - } + if (iBestTarget != -1) + { + int bestTick = 0; + float tempFOV = 9999; + float bestFOV = 30; + Vector lowestDistTicks(180, 180, 0); + for (int t = 0; t < 12; ++t) + { + Vector ViewDir = angle_vector(cmd->viewangles); + float tempFOV = distance_point_to_line( + headPositions[iBestTarget][t].hitboxpos, + g_pLocalPlayer->v_Eye, ViewDir); + if (bestFOV > tempFOV) + bestTick = t, bestFOV = tempFOV; + } + if (cmd->buttons & IN_ATTACK) + cmd->tick_count = headPositions[i][bestTick].tickcount; + } + } } void Draw() { #if ENABLE_VISUALS + if (!enable) + return; + if (!draw_bt) + return; for (int i = 0; i < 24; i++) for (int j = 0; j < 12; j++) { - auto hbpos = headPositions[i][j].hitboxpos; - auto tickount = headPositions[i][j].tickcount; - if (!hbpos.x && !hbpos.y && !hbpos.z) - continue; - Vector out; - rgba_t color = colors::FromHSL(fabs(sin(j / 2.0f)) * 360.0f, - 0.85f, 0.9f); - if (draw::WorldToScreen(hbpos, out)) - { - draw_api::draw_rect(out.x, out.y, 3, 3, color); - } + auto hbpos = headPositions[i][j].hitboxpos; + auto tickount = headPositions[i][j].tickcount; + if (!hbpos.x && !hbpos.y && !hbpos.z) + continue; + Vector out; + rgba_t color = + colors::FromHSL(fabs(sin(j / 2.0f)) * 360.0f, 0.85f, 0.9f); + if (draw::WorldToScreen(hbpos, out)) + { + draw_api::draw_rect(out.x, out.y, 3, 3, color); + } } #endif } } } } - - diff --git a/src/hacks/CMakeLists.txt b/src/hacks/CMakeLists.txt index 830c7534..b3a8732d 100644 --- a/src/hacks/CMakeLists.txt +++ b/src/hacks/CMakeLists.txt @@ -1,4 +1,9 @@ target_sources(cathook PRIVATE + "${CMAKE_CURRENT_LIST_DIR}/AutoJoin.cpp" + "${CMAKE_CURRENT_LIST_DIR}/CatBot.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Spam.cpp") +if(NOT LagbotMode) + target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/Achievement.cpp" "${CMAKE_CURRENT_LIST_DIR}/Aimbot.cpp" "${CMAKE_CURRENT_LIST_DIR}/Announcer.cpp" @@ -11,13 +16,11 @@ target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/AutoDetonator.cpp" "${CMAKE_CURRENT_LIST_DIR}/AutoEquip.cpp" "${CMAKE_CURRENT_LIST_DIR}/AutoHeal.cpp" - "${CMAKE_CURRENT_LIST_DIR}/AutoJoin.cpp" "${CMAKE_CURRENT_LIST_DIR}/AutoReflect.cpp" "${CMAKE_CURRENT_LIST_DIR}/AutoSticky.cpp" "${CMAKE_CURRENT_LIST_DIR}/AutoTaunt.cpp" "${CMAKE_CURRENT_LIST_DIR}/Bunnyhop.cpp" "${CMAKE_CURRENT_LIST_DIR}/Backtrack.cpp" - "${CMAKE_CURRENT_LIST_DIR}/CatBot.cpp" "${CMAKE_CURRENT_LIST_DIR}/FollowBot.cpp" "${CMAKE_CURRENT_LIST_DIR}/HealArrows.cpp" "${CMAKE_CURRENT_LIST_DIR}/KillSay.cpp" @@ -25,12 +28,12 @@ target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/LagExploit.cpp" "${CMAKE_CURRENT_LIST_DIR}/Misc.cpp" "${CMAKE_CURRENT_LIST_DIR}/Noisemaker.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Spam.cpp" "${CMAKE_CURRENT_LIST_DIR}/Trigger.cpp" "${CMAKE_CURRENT_LIST_DIR}/UberSpam.cpp" "${CMAKE_CURRENT_LIST_DIR}/Walkbot.cpp" "${CMAKE_CURRENT_LIST_DIR}/Radar.cpp") - + add_subdirectory(ac) +endif() if(EnableVisuals) target_sources(cathook PRIVATE "${CMAKE_CURRENT_LIST_DIR}/ESP.cpp" @@ -38,5 +41,3 @@ if(EnableVisuals) "${CMAKE_CURRENT_LIST_DIR}/SkinChanger.cpp" "${CMAKE_CURRENT_LIST_DIR}/SpyAlert.cpp") endif() - -add_subdirectory(ac) \ No newline at end of file diff --git a/src/hacks/ESP.cpp b/src/hacks/ESP.cpp index 5e630a4e..923072e9 100644 --- a/src/hacks/ESP.cpp +++ b/src/hacks/ESP.cpp @@ -349,15 +349,18 @@ void CreateMove() if (i <= g_IEngine->GetMaxClients()) { - for (int j = 0; j < 18; ++j) - hitboxcache[i][j] = ent->hitboxes.GetHitbox(j); - if (draw_bones && ent->m_Type == ENTITY_PLAYER) + if (!CE_BAD(ent)) { - modelcache[i] = RAW_ENT(ent)->GetModel(); - if (modelcache[i]) + for (int j = 0; j < 18; ++j) + hitboxcache[i][j] = ent->hitboxes.GetHitbox(j); + if (draw_bones && ent->m_Type == ENTITY_PLAYER) { - stdiocache[i] = - g_IModelInfo->GetStudiomodel(modelcache[i]); + modelcache[i] = RAW_ENT(ent)->GetModel(); + if (modelcache[i]) + { + stdiocache[i] = + g_IModelInfo->GetStudiomodel(modelcache[i]); + } } } } diff --git a/src/hacks/FollowBot.cpp b/src/hacks/FollowBot.cpp index 16fe12a9..8dc06205 100644 --- a/src/hacks/FollowBot.cpp +++ b/src/hacks/FollowBot.cpp @@ -89,7 +89,8 @@ void WorldTick() continue; if (entity->m_Type != ENTITY_PLAYER) continue; - if ((int)follow_steam + 18 != entity->player_info.friendsID) // steamid check + if ((int) follow_steam + 18 != + entity->player_info.friendsID) // steamid check continue; logging::Info("Success"); @@ -147,7 +148,7 @@ void WorldTick() } } // last check for entity before we continue -if (!follow_target) + if (!follow_target) return; } diff --git a/src/hacks/Misc.cpp b/src/hacks/Misc.cpp index 0253644a..29b74b9f 100644 --- a/src/hacks/Misc.cpp +++ b/src/hacks/Misc.cpp @@ -116,6 +116,7 @@ CatCommand void CreateMove() { +#if not LAGBOT_MODE // Crithack static IClientEntity *localplayer, *weapon, *last_weapon = nullptr; static int tries, cmdn, md5seed, rseed, c, b; @@ -354,6 +355,7 @@ void CreateMove() if (nopush_enabled == pNoPush->GetBool()) pNoPush->SetValue(!nopush_enabled); } +#endif } #if ENABLE_VISUALS diff --git a/src/hacks/Radar.cpp b/src/hacks/Radar.cpp index 30b6a849..ff684241 100644 --- a/src/hacks/Radar.cpp +++ b/src/hacks/Radar.cpp @@ -82,7 +82,6 @@ std::pair WorldToRadar(int x, int y) } bool loaded = false; - textures::texture_atlas texture(DATA_PATH "/res/atlas.png", 1024, 512); void DrawEntity(int x, int y, CachedEntity *ent) @@ -101,20 +100,21 @@ void DrawEntity(int x, int y, CachedEntity *ent) else if (texture.texture.handle != GLEZ_TEXTURE_INVALID) loaded = true; else - return; + return; } struct basesprite { - textures::sprite sprite = texture.create_sprite(0, 0, 0, 0); + textures::sprite sprite = texture.create_sprite(0, 0, 0, 0); }; static std::array, 3> tx_class; static std::array tx_teams; static std::array tx_items; for (int i = 0; i < 3; i++) - for (int j = 0; j < 9; j++) - tx_class[i][j].sprite.setsprite(64 * j, texture.height -64 * (i + 1), 64, 64); + for (int j = 0; j < 9; j++) + tx_class[i][j].sprite.setsprite( + 64 * j, texture.height - 64 * (i + 1), 64, 64); tx_teams[0].sprite.setsprite(11 * 64, texture.height - 128, 64, 64); - tx_teams[1].sprite.setsprite(11 * 64, texture.height -64, 64, 64); + tx_teams[1].sprite.setsprite(11 * 64, texture.height - 64, 64, 64); tx_items[0].sprite.setsprite(10 * 64, texture.height - 64, 64, 64); tx_items[1].sprite.setsprite(10 * 64, texture.height - 128, 64, 64); diff --git a/src/helpers.cpp b/src/helpers.cpp index 985079a2..67868940 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -679,11 +679,8 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity) { IF_GAME(IsTF2()) { - rspeed = re::C_TFWeaponBaseGun::GetProjectileSpeed( - RAW_ENT(g_pLocalPlayer->weapon())); - // TODO Wrong grenade launcher gravity - rgrav = re::C_TFWeaponBaseGun::GetProjectileGravity( - RAW_ENT(g_pLocalPlayer->weapon())); + rspeed = 1200.0f; + rgrav = 0.4f; } else IF_GAME(IsTF2C()) { @@ -693,10 +690,13 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity) } else if (weapon->m_iClassID == CL_CLASS(CTFCompoundBow)) { - rspeed = re::C_TFWeaponBaseGun::GetProjectileSpeed( - RAW_ENT(g_pLocalPlayer->weapon())); - rgrav = re::C_TFWeaponBaseGun::GetProjectileGravity( - RAW_ENT(g_pLocalPlayer->weapon())); + float chargetime = + g_GlobalVars->curtime - CE_FLOAT(weapon, netvar.flChargeBeginTime); + rspeed = (float) ((float) (fminf(fmaxf(chargetime, 0.0), 1.0) * 800.0) + + 1800.0); + rgrav = (float) ((float) (fminf(fmaxf(chargetime, 0.0), 1.0) * + -0.40000001) + + 0.5); } else if (weapon->m_iClassID == CL_CLASS(CTFBat_Wood)) { diff --git a/src/hooks/CreateMove.cpp b/src/hooks/CreateMove.cpp index bd61360c..e360b7f3 100644 --- a/src/hooks/CreateMove.cpp +++ b/src/hooks/CreateMove.cpp @@ -75,7 +75,6 @@ void RunEnginePrediction(IClientEntity *ent, CUserCmd *ucmd) namespace hooked_methods { - DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, CUserCmd *cmd) { @@ -90,7 +89,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, tickcount++; g_pUserCmd = cmd; - +#if not LAGBOT_MODE IF_GAME(IsTF2C()) { if (CE_GOOD(LOCAL_W) && minigun_jump && @@ -99,7 +98,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, CE_INT(LOCAL_W, netvar.iWeaponState) = 0; } } - +#endif ret = original::CreateMove(this_, input_sample_time, cmd); PROF_SECTION(CreateMove); @@ -192,6 +191,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, hacks::shared::autojoin::Update(); #if ENABLE_IPC +#if not LAGBOT_MODE static int team_joining_state = 0; static float last_jointeam_try = 0; CachedEntity *found_entity, *ent; @@ -259,9 +259,11 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, } } } +#endif #endif if (CE_GOOD(g_pLocalPlayer->entity)) { +#if not LAGBOT_MODE IF_GAME(IsTF2()) { UpdateHoovyList(); @@ -272,10 +274,12 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, PROF_SECTION(CM_esp); hacks::shared::esp::CreateMove(); } +#endif #endif *bSendPackets = true; if (!g_pLocalPlayer->life_state && CE_GOOD(g_pLocalPlayer->weapon())) { +#if not LAGBOT_MODE { PROF_SECTION(CM_walkbot); hacks::shared::walkbot::Move(); @@ -313,8 +317,8 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, engine_prediction::RunEnginePrediction(RAW_ENT(LOCAL_E), g_pUserCmd); { - PROF_SECTION(CM_backtracc); - hacks::shared::backtrack::Run(); + PROF_SECTION(CM_backtracc); + hacks::shared::backtrack::Run(); } { PROF_SECTION(CM_aimbot); @@ -371,7 +375,9 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, if (debug_projectiles) projectile_logging::Update(); Prediction_CreateMove(); +#endif } +#if not LAGBOT_MODE { PROF_SECTION(CM_misc); hacks::shared::misc::CreateMove(); @@ -380,19 +386,23 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, PROF_SECTION(CM_crits); criticals::create_move(); } +#endif { PROF_SECTION(CM_spam); hacks::shared::spam::CreateMove(); } +#if not LAGBOT_MODE { PROF_SECTION(CM_AC); angles::Update(); hacks::shared::anticheat::CreateMove(); } +#endif } if (time_replaced) g_GlobalVars->curtime = curtime_old; g_Settings.bInvalid = false; +#if not LAGBOT_MODE { PROF_SECTION(CM_chat_stack); chat_stack::OnCreateMove(); @@ -405,6 +415,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, PROF_SECTION(CM_lagexploit); hacks::shared::lagexploit::CreateMove(); } +#endif // TODO Auto Steam Friend @@ -419,7 +430,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, } } #endif - +#if not LAGBOT_MODE if (CE_GOOD(g_pLocalPlayer->entity)) { static int fakelag_queue = 0; @@ -481,6 +492,7 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, if (cmd) g_Settings.last_angles = cmd->viewangles; } +#endif NET_StringCmd senddata(serverlag_string.GetString()); INetChannel *ch = (INetChannel *) g_IEngine->GetNetChannelInfo(); senddata.SetNetChannel(ch); @@ -493,11 +505,24 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, } if (serverlag_amount || votelogger::antikick_ticks) { - float latency = - g_IEngine->GetNetChannelInfo()->GetAvgPackets(FLOW_INCOMING); - logging::Info("%f", latency); - if (latency > 200 && adjust) - serverlag_amount = (int) serverlag_amount + 1; + if (adjust) + { + if ((int) serverlag_amount == 1) + serverlag_amount = (int) serverlag_amount + 10; + if (ch->GetAvgData(FLOW_INCOMING) == prevflow) + { + if (prevflowticks > 66 * (int) adjust) + serverlag_amount = (int) serverlag_amount - 1; + prevflowticks++; + } + if (ch->GetAvgData(FLOW_INCOMING) != prevflow) + { + if (prevflowticks < 66 * (int) adjust) + serverlag_amount = (int) serverlag_amount + 1; + prevflowticks = 0; + } + prevflow = ch->GetAvgData(FLOW_INCOMING); + } if (votelogger::antikick_ticks) votelogger::antikick_ticks--; if (votelogger::antikick_ticks) diff --git a/src/hooks/DispatchUserMessage.cpp b/src/hooks/DispatchUserMessage.cpp index b684cef5..1c865626 100644 --- a/src/hooks/DispatchUserMessage.cpp +++ b/src/hooks/DispatchUserMessage.cpp @@ -225,15 +225,18 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type, } } } +#if not LAGBOT_MODE if (sendmsg.test_and_set(300000) && hacks::shared::antiaim::communicate) chat_stack::Say("!!meow"); +#endif if (crypt_chat) { if (message.find("!!") == 0) { if (ucccccp::validate(message)) { +#if not LAGBOT_MODE if (ucccccp::decrypt(message) == "meow" && hacks::shared::antiaim::communicate && data[0] != LOCAL_E->m_IDX && @@ -244,6 +247,7 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type, playerlist::k_EState::CAT; chat_stack::Say("!!meow"); } +#endif PrintChat("\x07%06X%s\x01: %s", 0xe05938, name.c_str(), ucccccp::decrypt(message).c_str()); } @@ -270,4 +274,4 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type, votelogger::user_message(buf, type); return original::DispatchUserMessage(this_, type, buf); } -} \ No newline at end of file +} diff --git a/src/hooks/LevelInit.cpp b/src/hooks/LevelInit.cpp index 9a518a24..4558c8e6 100644 --- a/src/hooks/LevelInit.cpp +++ b/src/hooks/LevelInit.cpp @@ -82,9 +82,13 @@ namespace hooked_methods DEFINE_HOOKED_METHOD(LevelInit, void, void *this_, const char *name) { DelayTimer.update(); +#if not LAGBOT_MODE playerlist::Save(); +#endif votelogger::antikick_ticks = 0; +#if not LAGBOT_MODE hacks::shared::lagexploit::bcalled = false; +#endif #if ENABLE_VISUALS typedef bool *(*LoadNamedSkys_Fn)(const char *); uintptr_t addr = gSignatures.GetEngineSignature( @@ -110,12 +114,14 @@ DEFINE_HOOKED_METHOD(LevelInit, void, void *this_, const char *name) #endif g_IEngine->ClientCmd_Unrestricted("exec cat_matchexec"); +#if not LAGBOT_MODE hacks::shared::aimbot::Reset(); hacks::shared::backtrack::Init(); chat_stack::Reset(); hacks::shared::anticheat::ResetEverything(); original::LevelInit(this_, name); hacks::shared::walkbot::OnLevelInit(); +#endif #if ENABLE_IPC if (ipc::peer) { diff --git a/src/hooks/LevelShutdown.cpp b/src/hooks/LevelShutdown.cpp index 9e3f2cea..525e195b 100644 --- a/src/hooks/LevelShutdown.cpp +++ b/src/hooks/LevelShutdown.cpp @@ -13,11 +13,15 @@ namespace hooked_methods DEFINE_HOOKED_METHOD(LevelShutdown, void, void *this_) { need_name_change = true; +#if not LAGBOT_MODE playerlist::Save(); +#endif g_Settings.bInvalid = true; +#if not LAGBOT_MODE hacks::shared::aimbot::Reset(); chat_stack::Reset(); hacks::shared::anticheat::ResetEverything(); +#endif #if ENABLE_IPC if (ipc::peer) { @@ -27,4 +31,4 @@ DEFINE_HOOKED_METHOD(LevelShutdown, void, void *this_) #endif return original::LevelShutdown(this_); } -} \ No newline at end of file +} diff --git a/src/hooks/Paint.cpp b/src/hooks/Paint.cpp index cddd33e4..20a8efba 100644 --- a/src/hooks/Paint.cpp +++ b/src/hooks/Paint.cpp @@ -23,7 +23,9 @@ DEFINE_HOOKED_METHOD(Paint, void, IEngineVGui *this_, PaintMode_t mode) if (mode & PaintMode_t::PAINT_UIPANELS) { +#if not LAGBOT_MODE hacks::tf2::killstreak::apply_killstreaks(); +#endif hacks::shared::catbot::update(); if (hitrate::hitrate_check) { @@ -91,4 +93,4 @@ DEFINE_HOOKED_METHOD(Paint, void, IEngineVGui *this_, PaintMode_t mode) return original::Paint(this_, mode); } -} \ No newline at end of file +} diff --git a/src/hooks/Shutdown.cpp b/src/hooks/Shutdown.cpp index 030376c4..66d23284 100644 --- a/src/hooks/Shutdown.cpp +++ b/src/hooks/Shutdown.cpp @@ -7,7 +7,7 @@ #include "HookedMethods.hpp" static CatVar die_if_vac(CV_SWITCH, "die_if_vac", "0", "Die if VAC banned"); - +static CatVar autoabandon(CV_SWITCH, "cbu_abandon", "0", "Auto abandon"); namespace hooked_methods { @@ -39,7 +39,9 @@ DEFINE_HOOKED_METHOD(Shutdown, void, INetChannel *this_, const char *reason) original::Shutdown(this_, reason); } + if (autoabandon) + tfmm::dcandabandon(); if (hacks::shared::autojoin::auto_queue) tfmm::queue_start(); } -} \ No newline at end of file +} diff --git a/src/ipc.cpp b/src/ipc.cpp index 929a1dcd..b2751ebc 100644 --- a/src/ipc.cpp +++ b/src/ipc.cpp @@ -195,7 +195,7 @@ void update_mapname() strncpy(data.ingame.mapname, GetLevelName().c_str(), sizeof(data.ingame.mapname)); } - +float framerate = 0.0f; void UpdateTemporaryData() { user_data_s &data = peer->memory->peer_user_data[peer->client_id]; diff --git a/src/tfmm.cpp b/src/tfmm.cpp index e58ad999..d7fed6bd 100644 --- a/src/tfmm.cpp +++ b/src/tfmm.cpp @@ -53,23 +53,32 @@ void queue_leave() logging::Info("queue_start: CTFPartyClient == null!"); } Timer abandont{}; -CatCommand abandoncmd("disconnect_and_abandon", "Disconnect and abandon", []() { + +void dcandabandon() +{ re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient(); + re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem(); if (client) - { abandon(); + else + { + logging::Info("your party client is gay!"); + if (gc) + queue_leave(); + else + logging::Info("your gc is gay!"); + } + if (gc && client) while (1) - { if (abandont.test_and_set(4000)) { queue_leave(); break; } - } - } - else - logging::Info("your party client is gay!"); -}); +} +CatCommand abandoncmd("disconnect_and_abandon", "Disconnect and abandon", + []() { dcandabandon(); }); + void abandon() { re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem(); diff --git a/src/visual/drawmgr.cpp b/src/visual/drawmgr.cpp index d5faf71c..635a3059 100644 --- a/src/visual/drawmgr.cpp +++ b/src/visual/drawmgr.cpp @@ -140,8 +140,8 @@ void DrawCheatVisuals() } IF_GAME(IsTF2()) { - PROF_SECTION(DRAW_backtracc); - hacks::shared::backtrack::Draw(); + PROF_SECTION(DRAW_backtracc); + hacks::shared::backtrack::Draw(); } IF_GAME(IsTF2()) { diff --git a/src/visual/menu/ncc/Menu.cpp b/src/visual/menu/ncc/Menu.cpp index 5635eacb..475fc3da 100644 --- a/src/visual/menu/ncc/Menu.cpp +++ b/src/visual/menu/ncc/Menu.cpp @@ -721,6 +721,7 @@ static const std::string list_tf2 = R"( "Backtrack" [ "Backtrack Menu" "backtrack" + "backtrack_draw" ] "Anti Cheat" [ "Anti Cheat Menu" diff --git a/src/votelogger.cpp b/src/votelogger.cpp index 3a340e6e..8cb3832c 100644 --- a/src/votelogger.cpp +++ b/src/votelogger.cpp @@ -6,6 +6,7 @@ */ #include "common.hpp" +#include namespace votelogger { @@ -19,7 +20,17 @@ static CatVar anti_votekick(CV_SWITCH, "anti_votekick", "0", "anti-votekick", "to enable votelog and that this\nmakes the server " "be down for about 30 seconds\ncl_timeout 60 is a " "must"); -int antikick_ticks = 0; +static CatVar kick_msg(CV_STRING, "anti_votekick_string", + "Everyone thank $NAME for initiating the votekick! The " + "server will now be shut down!", + "anti-votekick message", + "Send this message on Votekick attempts against " + "you.\n$NAME gets replaced with their name\n$CLASS with " + "their class."); +int antikick_ticks = 0; +const std::string tf_classes[] = { "class", "scout", "sniper", "soldier", + "demoman", "medic", "heavy", "pyro", + "spy", "engineer" }; void user_message(bf_read &buffer, int type) { bool islocalplayer = false; @@ -47,17 +58,23 @@ void user_message(bf_read &buffer, int type) unsigned steamID = 0; player_info_s info; if (g_IEngine->GetPlayerInfo(eid, &info)) - { steamID = info.friendsID; - } - if (eid == LOCAL_E->m_IDX) + if (eid == LOCAL_E->m_IDX || + playerlist::AccessData(steamID).state == + playerlist::k_EState::FRIEND) { islocalplayer = true; if (anti_votekick && !antikick_ticks) { - antikick_ticks = 66 * 60; - for (int i = 0; i < (int) 70; i++) - g_IEngine->ServerCmd("voicemenu 0 0", false); + antikick_ticks = 66 * 60; + std::string msg = std::to_string(*kick_msg.GetString()); + boost::replace_all(msg, "$NAME", format(info.name)); + if (CE_GOOD(ENTITY(eid))) + { + int clz = g_pPlayerResource->GetClass(ENTITY(eid)); + boost::replace_all(msg, "$CLASS", format(tf_classes[clz])); + } + chat_stack::Say(msg); } }