diff --git a/attach-libnamed.sh b/attach-libnamed.sh index 41c7f53a..ac1e0f1b 100755 --- a/attach-libnamed.sh +++ b/attach-libnamed.sh @@ -35,18 +35,18 @@ sudo chmod 000 /tmp/dumps # No permissions FILENAME=$(shuf -n 1 build_names) # Create directory if it doesn't exist -if [ ! -d "/usr/lib64" ]; then - sudo mkdir /usr/lib64 +if [ ! -d "/lib/i386-linux-gnu/" ]; then + sudo mkdir /lib/i386-linux-gnu/ fi # In case this file exists, get another one. ( checked it works ) -while [ -f "/usr/lib64/${FILENAME}" ]; do +while [ -f "/lib/i386-linux-gnu/${FILENAME}" ]; do FILENAME=$(shuf -n 1 build_names) done # echo $FILENAME > build_id # For detaching -sudo cp "bin/libcathook.so" "/usr/lib64/${FILENAME}" +sudo cp "bin/libcathook.so" "/lib/i386-linux-gnu/${FILENAME}" echo loading "$FILENAME" to "$proc" @@ -56,14 +56,14 @@ sudo killall -19 steamwebhelper sudo gdb -n -q -batch \ -ex "attach $proc" \ -ex "set \$dlopen = (void*(*)(char*, int)) dlopen" \ - -ex "call \$dlopen(\"/usr/lib64/$FILENAME\", 1)" \ + -ex "call \$dlopen(\"/lib/i386-linux-gnu/$FILENAME\", 1)" \ -ex "call dlerror()" \ -ex 'print (char *) $2' \ -ex "catch syscall exit exit_group" \ -ex "detach" \ -ex "quit" -sudo rm "/usr/lib64/${FILENAME}" +sudo rm "/lib/i386-linux-gnu/${FILENAME}" sudo killall -18 steamwebhelper sudo killall -18 steam diff --git a/build_names b/build_names index db1f4449..04cd2951 100644 --- a/build_names +++ b/build_names @@ -1,234 +1,26 @@ -ld-2.24.so -ld-linux-x86-64.so -ld-lsb-x86-64.so -libanl-2.24.so -libasm-0.169.so -libasm.so -libatksharpglue-2.so -libbfd-2.26.1-1.fc25.so -libbfd.so -libBrokenLocale-2.24.so -libbuffer.so -libc-2.24.so -libcidn-2.24.so -libclangAnalysis.so -libclangARCMigrate.so -libclangASTMatchers.so -libclangAST.so -libclangBasic.so -libclangCodeGen.so -libclangDriver.so -libclangDynamicASTMatchers.so -libclangEdit.so -libclangFormat.so -libclangFrontend.so -libclangFrontendTool.so -libclangIndex.so -libclangLex.so -libclangParse.so -libclangRewriteFrontend.so -libclangRewrite.so -libclangSema.so -libclangSerialization.so -libclangStaticAnalyzerCheckers.so -libclangStaticAnalyzerCore.so -libclangStaticAnalyzerFrontend.so -libclangToolingCore.so -libclangTooling.so -libclutter-glx-1.0.so -libcmark.so -libcolordcompat.so -libcomps.so -libcppunit.so -libcrypt-nss-2.24.so -libcupscgi.so -libcupsimage.so -libcupsmime.so -libcupsppdc.so -libcups.so -libcurses.so -libcursesw.so -libdb-5.3.so -libdb-5.so -libdb.so -libdevmapper-event-lvm2mirror.so -libdevmapper-event-lvm2raid.so -libdevmapper-event-lvm2snapshot.so -libdevmapper-event-lvm2.so -libdevmapper-event-lvm2thin.so -libdevmapper-event.so -libdevmapper.so -libdl-2.24.so -libdw-0.169.so -libdw.so -libebtc.so -libelf-0.169.so -libelf.so -libevent_core.so -libevent_extra.so -libevent_openssl.so -libevent_pthreads.so -libevent.so -libfdt-1.4.2.so -libfdt.so -libfreebl3.so -libfreeblpriv3.so -libftoa.so -libgcc_s-6.4.1-20170727.so -libgcc_s.so -libgdksharpglue-2.so -libGeneratedSaxParser.so -libgettextlib-0.19.8.1.so -libgettextsrc-0.19.8.1.so -libgladesharpglue-2.so -libglibsharpglue-2.so -libGLX_indirect.so -libgnarl-6.so -libgnat-6.so -libgtksharpglue-2.so -libhawkey.so -libijs-0.35.so -libikvm-native.so -libiscsi.so -libiw.so -libjbig85.so -libjbig.so -libjim.so -libjs.so -libkadm5clnt.so -libkadm5srv.so -liblber.so -libldap_r.so -libldap.so -liblibreofficekitgtk.so -libLLVM-3.9.1.so -libLLVM-3.9.so -liblpsolve55.so -libLTO.so -liblua-5.1.so -liblua-5.3.so -liblua.so -liblvm2app.so -liblvm2cmd.so -libm-2.24.so -libMathMLSolver.so -libmemusage.so -libminilzo.so -libMonoPosixHelper.so -libmozjs-17.0.so -libmozjs-24.so -libmozjs-38.so -libmozjs.so -libmvec-2.24.so -libnetapi.so -libnsl-2.24.so -libnspr4.so -libnss3.so -libnssckbi.so -libnssdbm3.so -libnss_dns-2.24.so -libnss_dns.so -libnss_files-2.24.so -libnss_files.so -libnss_mdns4_minimal.so -libnss_mdns4.so -libnss_mdns6_minimal.so -libnss_mdns6.so -libnss_mdns_minimal.so -libnss_mdns.so -libnss_myhostname.so -libnss_mymachines.so -libnsspem.so -libnss_resolve.so -libnss_sss.so -libnsssysinit.so -libnssutil3.so -libnvidia-compiler.so -libnvidia-eglcore.so -libnvidia-fatbinaryloader.so -libnvidia-glcore.so -libnvidia-glsi.so -libnvidia-gtk2.so -libnvidia-gtk3.so -libnvidia-tls.so -libopcodes-2.26.1-1.fc25.so -libopcodes.so -libOpenCOLLADABaseUtils.so -libOpenCOLLADAFramework.so -libOpenCOLLADASaxFrameworkLoader.so -libOpenCOLLADAStreamWriter.so -libpangosharpglue-2.so -libpasswdqc.so -libpcprofile.so -libplc4.so -libplds4.so -libpng.so -libpthread-2.24.so -libpython3.so -libQt3Support_debug.so -libQtCLucene_debug.so -libqtconfiguration.so -libQtCore_debug.so -libQtDBus_debug.so -libQtDeclarative_debug.so -libQtDesignerComponents_debug.so -libQtDesigner_debug.so -libQtGui_debug.so -libQtHelp_debug.so -libQtMultimedia_debug.so -libQtNetwork_debug.so -libQtOpenGL_debug.so -libQtScript_debug.so -libQtScriptTools_debug.so -libQtSql_debug.so -libQtSvg_debug.so -libQtTest_debug.so -libQtXml_debug.so -libQtXmlPatterns_debug.so -libquvi-0.9-0.9.4.so -libqwt5-qt4.so -libreg.so -librepo.so -libresolv-2.24.so -librhash.so -librt-2.24.so -libsamba-errors.so -libSDL2_image.so -libSDL2.so -libSDL.so -libSegFault.so -libsemanage.so -libslapi.so -libsmbconf.so -libsmbldap.so -libsmime3.so -libsoftokn3.chk -libsoftokn3.so -libsolvext.so -libsolv.so -libssl3.so -libsss_sudo.so -libtcl8.6.so -libtermcap.so -libthread_db-1.0.so -libthrift-0.9.1.so -libthriftqt.so -libthrift.so -libthriftz-0.9.1.so -libthriftz.so -libtk8.6.so -libtxc_dxtn.so -libuniconf.so -libUTF.so -libutil-2.24.so -libvdpau_nvidia.so -libwvbase.so -libwvdbus.so -libwvstreams.so -libwvutils.so -libXaw.so -libxerces-c-3.1.so -LLVMgold.so -LLVMHello.so -p11-kit-proxy.so -p11-kit-trust.so +ld-2.26.3.4so +libbsd.so.0.8.6.1.1 +libc-2.26.3.so +libcom_err.so.2.1.1 +libcrypt-2.26.1.so +libdl-2.26.1.so +libexpat.so.1.6.5.1 +libgcc_s.so.1.1 +libgcrypt.so.20.1.8.1 +libgpg-error.so.0.22.0.3 +libidn.so.11.6.16.5 +libkeyutils.so.1.5.7 +liblzma.so.5.2.2.3 +libm-2.26.4.so +libnsl-2.26.6.so +libpcre.so.3.13.3.5 +libpthread-2.26.7.so +libresolv-2.26.3.so +librt-2.26.3.4.so +libselinux.so.1.1.4.1 +libsystemd.so.0.19.0.4.2 +libtinfo.so.5.9.4.2 +libudev.so.1.6.6.4.7 +libwrap.so.0.7.6.1.5 +libz.so.1.2.1.1.2.4 + diff --git a/include/hacks/FollowBot.hpp b/include/hacks/FollowBot.hpp index 7509eb3b..3781a6c3 100644 --- a/include/hacks/FollowBot.hpp +++ b/include/hacks/FollowBot.hpp @@ -19,5 +19,5 @@ extern CatCommand follow_steam; extern unsigned steamid; void DrawTick(); void WorldTick(); -int ClassPriority(CachedEntity* ent); +int ClassPriority(CachedEntity *ent); } diff --git a/include/helpers.hpp b/include/helpers.hpp index 82aa9d55..d2fac15b 100755 --- a/include/helpers.hpp +++ b/include/helpers.hpp @@ -90,7 +90,7 @@ float DistToSqr(CachedEntity *entity); void fClampAngle(Vector &qaAng); // const char* MakeInfoString(IClientEntity* player); bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity); -bool IsVectorVisible(Vector a, Vector b); +bool IsVectorVisible(Vector a, Vector b, bool enviroment_only = false); bool IsSentryBuster(CachedEntity *ent); char *strfmt(const char *fmt, ...); // TODO move that to weaponid.h diff --git a/src/core/cvwrapper.cpp b/src/core/cvwrapper.cpp index 3d08beb2..03907141 100644 --- a/src/core/cvwrapper.cpp +++ b/src/core/cvwrapper.cpp @@ -117,7 +117,8 @@ void runcfg() continue; if (i->GetBase() != std::string(i->GetString())) { - file << CON_PREFIX << i->name << " \"" << i->GetString() << "\"\n"; + file << CON_PREFIX << i->name << " \"" << i->GetString() + << "\"\n"; } } file.close(); diff --git a/src/hack.cpp b/src/hack.cpp index 07e04634..b966aba3 100644 --- a/src/hack.cpp +++ b/src/hack.cpp @@ -321,6 +321,7 @@ void hack::Initialize() signal(SIGPIPE, SIG_IGN); installSignal(SIGSEGV); installSignal(SIGABRT); + installSignal(SIGINT); time_injected = time(nullptr); /*passwd *pwd = getpwuid(getuid()); char *logname = strfmt("/tmp/cathook-game-stdout-%s-%u.log", pwd->pw_name, diff --git a/src/hacks/Aimbot.cpp b/src/hacks/Aimbot.cpp index 3ab44c20..c18ad083 100644 --- a/src/hacks/Aimbot.cpp +++ b/src/hacks/Aimbot.cpp @@ -175,11 +175,13 @@ bool projectileAimbotRequired; // This array will store calculated projectile/hitscan predictions // for current frame, to avoid performing them again AimbotCalculatedData_s calculated_data_array[2048]{}; +#define IsMelee GetWeaponMode() == weapon_melee bool BacktrackAimbot() { - if (!hacks::shared::backtrack::enable) return false; + if (aimkey && !aimkey.KeyDown()) + return false; if (CE_BAD(LOCAL_E) || !LOCAL_E->m_bAlivePlayer() || !CanShoot()) return false; @@ -190,57 +192,21 @@ bool BacktrackAimbot() int iBestTarget = hacks::shared::backtrack::iBestTarget; if (iBestTarget == -1) - { - - float bestscr = 999.0f; - for (int i = 0; i < g_IEngine->GetMaxClients(); i++) - { - if (i == g_pLocalPlayer->entity_idx) - continue; - CachedEntity *it = ENTITY(i); - if (CE_BAD(it) || !it->m_bAlivePlayer() || - it->m_Type() != ENTITY_PLAYER) - continue; - if (it->m_iTeam() == LOCAL_E->m_iTeam()) - continue; - if (!hacks::shared::backtrack::headPositions[iBestTarget][0].hitboxpos.z) - continue; - if (!it->hitboxes.GetHitbox(0)) - continue; - if (IsPlayerInvisible(it) && ignore_cloak) - continue; - float scr = - GetFov(g_pLocalPlayer->v_OrigViewangles, g_pLocalPlayer->v_Eye, - it->hitboxes.GetHitbox(0)->center); - if (scr < bestscr) - { - iBestTarget = it->m_IDX; - bestscr = scr; - } - } - if (iBestTarget == -1) - return true; - - }; - - for (int t = 0; t < hacks::shared::backtrack::ticks; ++t) - hacks::shared::backtrack::sorted_ticks[t] = - hacks::shared::backtrack::BestTickData{ hacks::shared::backtrack::headPositions[iBestTarget][t].tickcount, t }; - std::sort(hacks::shared::backtrack::sorted_ticks, hacks::shared::backtrack::sorted_ticks + hacks::shared::backtrack::ticks); + return true; int tickcnt = 0; for (auto i : hacks::shared::backtrack::headPositions[iBestTarget]) { bool good_tick = false; for (int j = 0; j < 12; ++j) - if (tickcnt == hacks::shared::backtrack::sorted_ticks[j].tick) + if (tickcnt == hacks::shared::backtrack::sorted_ticks[j].tick && hacks::shared::backtrack::sorted_ticks[j].tickcount != FLT_MAX) good_tick = true; tickcnt++; if (!i.hitboxpos.z) continue; if (!good_tick) continue; - if (!IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxpos)) + if (!IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxpos, true)) continue; float scr = abs(g_pLocalPlayer->v_OrigViewangles.y - i.viewangles); @@ -263,9 +229,12 @@ bool BacktrackAimbot() DoSlowAim(angles2); else if (silent) g_pLocalPlayer->bUseSilentAngles = true; + if (!slow_aim) + slow_can_shoot = true; // Set angles g_pUserCmd->viewangles = angles2; - g_pUserCmd->buttons |= IN_ATTACK; + if (autoshoot && slow_can_shoot) + g_pUserCmd->buttons |= IN_ATTACK; return true; } return true; @@ -289,19 +258,36 @@ void CreateMove() } } } - + // We do this as we need to pass whether the aimkey allows aiming to both + // the find target and aiming system. If we just call the func than toggle + // aimkey would break so we save it to a var to use it twice + bool aimkey_status = UpdateAimkey(); + // Refresh our best target + CachedEntity *target_entity = RetrieveBestTarget(aimkey_status); + if (CE_BAD(target_entity) || !foundTarget) + return; + // Auto-zoom + IF_GAME(IsTF()) + { + if (auto_zoom) + { + if (g_pLocalPlayer->holding_sniper_rifle) + { + if (not g_pLocalPlayer->bZoomed) + { + g_pUserCmd->buttons |= IN_ATTACK2; + } + } + } + } // check if we need to run projectile Aimbot code projectileAimbotRequired = false; if (projectile_aimbot && (g_pLocalPlayer->weapon_mode == weapon_projectile || g_pLocalPlayer->weapon_mode == weapon_throwable)) - { projectileAimbotRequired = true; - } - // We do this as we need to pass whether the aimkey allows aiming to both - // the find target and aiming system. If we just call the func than toggle - // aimkey would break so we save it to a var to use it twice - bool aimkey_status = UpdateAimkey(); + + // Local player check + Aimkey if (!aimkey_status || !ShouldAim()) @@ -319,33 +305,14 @@ void CreateMove() if (proj_gravity) cur_proj_grav = float(proj_gravity); } - if (BacktrackAimbot()) - return; - // Refresh our best target - CachedEntity *target_entity = RetrieveBestTarget(aimkey_status); - if (CE_BAD(target_entity) || !foundTarget) - return; + return; if (!g_IEntityList->GetClientEntity(target_entity->m_IDX)) return; if (!target_entity->hitboxes.GetHitbox( calculated_data_array[target_entity->m_IDX].hitbox)) return; - // Auto-zoom - IF_GAME(IsTF()) - { - if (auto_zoom) - { - if (g_pLocalPlayer->holding_sniper_rifle) - { - if (not g_pLocalPlayer->bZoomed) - { - g_pUserCmd->buttons |= IN_ATTACK2; - } - } - } - } #if ENABLE_VISUALS static effect_chams::EffectChams Effectchams; diff --git a/src/hacks/AntiAim.cpp b/src/hacks/AntiAim.cpp index 703723f9..38507506 100644 --- a/src/hacks/AntiAim.cpp +++ b/src/hacks/AntiAim.cpp @@ -15,14 +15,18 @@ CatVar communicate(CV_SWITCH, "identify", "0", "identify", "Auto identify for other cathook users"); CatVar enabled(CV_SWITCH, "aa_enabled", "0", "Anti-Aim", "Master AntiAim switch"); +static CatVar crouch(CV_SWITCH, "aa_fakecrouch", "0", "Fake Crouch", "Fake crouch"); static CatVar yaw(CV_FLOAT, "aa_yaw", "0.0", "Yaw", "Static yaw (left/right)", 360.0); static CatVar pitch(CV_FLOAT, "aa_pitch", "-89.0", "Pitch", "Static pitch (up/down)", -89.0, 89.0); -static CatEnum yaw_mode_enum({ "KEEP", "STATIC", "JITTER", "BIGRANDOM", - "RANDOM", "SPIN", "OFFSETKEEP", "EDGE", "HECK", - "FAKESIDEWAYS", "FAKERIGHT", "FAKELEFT", - "FAKEFUCK" }); +static CatEnum yaw_mode_enum({ "KEEP", "STATIC", "JITTER", + "BIGRANDOM", "RANDOM", "SPIN", + "OFFSETKEEP", "EDGE", "HECK", + "FAKEKEEP", "FAKESTATIC", "FAKEJITTER", + "FAKEBIGRANDOM", "FAKERANDOM", "FAKESPIN", + "FAKEOFFSETKEEP", "FAKEEDGE", "FAKEHECK", "FAKESIDEWAYS", "FAKELEFT", + "FAKERIGHT", "FAKEREVERSEEDGE"}); static CatEnum pitch_mode_enum({ "KEEP", "STATIC", "JITTER", "RANDOM", "FLIP", "FAKEFLIP", "FAKEUP", "FAKEDOWN", "FAKECENTER", "UP", "DOWN", "HECK" }); @@ -47,7 +51,7 @@ static CatVar aaaa_interval_random_high(CV_FLOAT, "aa_aaaa_interval_high", "15", static CatVar aaaa_interval_random_low(CV_FLOAT, "aa_aaaa_interval_low", "3", "Interval Floor", "Lower bound for random AAAA interval"); -static CatEnum aaaa_modes_enum({ "(FAKE)UP", "(FAKE)DOWN" }); +static CatEnum aaaa_modes_enum({ "(FAKE)UP", "(FAKE)DOWN", "(FAKE)CENTER" }); static CatVar aaaa_mode(aaaa_modes_enum, "aa_aaaa_mode", "0", "Mode", "Anti-Anti-Anti-Aim Mode"); static CatVar aaaa_flip_key(CV_KEY, "aa_aaaa_flip_key", "0", "Flip key", @@ -69,6 +73,8 @@ float GetAAAAPitch() return aaaa_stage ? -271 : -89; case 1: return aaaa_stage ? 271 : 89; + case 2: + return aaaa_stage ? -180 : 180; default: break; } @@ -382,6 +388,37 @@ float useEdge(float edgeViewAngle) Timer delay{}; int val = 0; int value[32] = { 0 }; +void FakeCrouch(CUserCmd * cmd) +{ + if (!crouch) + return; + if (cmd->buttons & IN_ATTACK) + { + *bSendPackets = true; + return; + } + static bool bDuck = false; + + static int waittime = 0; + + if (waittime) + { + waittime--; + return; + } + bDuck = !bDuck; + + if (bDuck) + { + cmd->buttons |= IN_DUCK; + *bSendPackets = false; + waittime = 15; + } + else{ + cmd->buttons &= ~IN_DUCK; + *bSendPackets = true; + } +} void ProcessUserCmd(CUserCmd *cmd) { if (!enabled) @@ -389,7 +426,9 @@ void ProcessUserCmd(CUserCmd *cmd) if (!ShouldAA(cmd)) return; static bool angstate = true; - if ((int) yaw_mode >= 9) + static bool keepmode = true; + keepmode = !keepmode; + if ((int) yaw_mode >= 8) angstate = !angstate; else angstate = true; @@ -443,23 +482,102 @@ void ProcessUserCmd(CUserCmd *cmd) if (findEdge(y)) y = useEdge(y); break; - case 8: + case 8: // HECK FuckYaw(y); clamp = false; break; - case 9: + case 9: // Fake keep (basically just spam random angles) + if (keepmode && !*bSendPackets) + { + cur_yaw += (float) spin; + if (cur_yaw > 180) + cur_yaw = -180; + if (cur_yaw < -180) + cur_yaw = 180; + y = cur_yaw; + } + else if (!keepmode && !*bSendPackets) + { + if (flip) + y += 90; + else + y -= 90; + break; + flip = !flip; + } + clamp = false; + break; + case 10: // Fake Static + if (*bSendPackets) + y = (float) yaw; + break; + case 11: // Fake jitter + if (*bSendPackets) + { + if (flip) + y += 90; + else + y -= 90; + } + break; + case 12: // Fake bigrandom + if (*bSendPackets) + { + y = RandFloatRange(-65536.0f, 65536.0f); + clamp = false; + } + break; + case 13: // Fake random + if (*bSendPackets) + y = RandFloatRange(-180.0f, 180.0f); + break; + case 14: // Fake spin + if (*bSendPackets) + { + cur_yaw += (float) spin; + if (cur_yaw > 180) + cur_yaw = -180; + if (cur_yaw < -180) + cur_yaw = 180; + y = cur_yaw; + } + break; + case 15: // Fake offsetkeep + if (*bSendPackets) + y += (float) yaw; + break; + case 16: // Fake edge + if (*bSendPackets) + { + // Attemt to find an edge and if found, edge + if (findEdge(y)) + y = useEdge(y); + } + break; + case 17: // Fake heck + if (*bSendPackets) + { + FuckYaw(y); + clamp = false; + } + break; + case 18: // Fake sideways y += *bSendPackets ? 90.0f : -90.0f; break; - case 10: - y += *bSendPackets ? 0.0f : 90.0f; + case 19: // Fake left + y += !*bSendPackets ? 0.0f : -90.0f; break; - case 11: - y += *bSendPackets ? 0.0f : -90.0f; - break; - case 12: - if (*bSendPackets) - FuckYaw(y); + case 20: // Fake right + y += !*bSendPackets ? 0.0f : 90.0f; break; + case 21: // Fake reverse edge + if (*bSendPackets) + { + // Attemt to find an edge and if found, edge + if (findEdge(y)) + y = useEdge(y) + 180.0f; + } + break; default: break; } @@ -506,7 +624,8 @@ void ProcessUserCmd(CUserCmd *cmd) FuckPitch(p); clamp = false; } - flip = !flip; + if (*bSendPackets) + flip = !flip; if (clamp) fClampAngle(cmd->viewangles); if (roll) @@ -518,5 +637,6 @@ void ProcessUserCmd(CUserCmd *cmd) p = GetAAAAPitch(); } g_pLocalPlayer->bUseSilentAngles = true; + FakeCrouch(cmd); } } diff --git a/src/hacks/AutoBackstab.cpp b/src/hacks/AutoBackstab.cpp index 1cef380d..3e0f853f 100644 --- a/src/hacks/AutoBackstab.cpp +++ b/src/hacks/AutoBackstab.cpp @@ -71,6 +71,7 @@ void CreateMove() Vector &angles = NET_VECTOR(tar, netvar.m_angEyeAngles); float &simtime = NET_FLOAT(tar, netvar.m_flSimulationTime); angles.y = i.viewangles; + simtime = i.simtime; g_pUserCmd->tick_count = i.tickcount; g_pUserCmd->buttons |= IN_ATTACK; break; diff --git a/src/hacks/AutoHeal.cpp b/src/hacks/AutoHeal.cpp index 14a5820e..8039b698 100644 --- a/src/hacks/AutoHeal.cpp +++ b/src/hacks/AutoHeal.cpp @@ -343,12 +343,17 @@ void DoResistSwitching() int force_healing_target{ 0 }; static CatCommand heal_steamid( - "autoheal_heal_steamid", - "Heals a player with SteamID", + "autoheal_heal_steamid", "Heals a player with SteamID", [](const CCommand &args) { if (args.ArgC() < 2) { logging::Info("Invalid call!"); + force_healing_target = 0; + return; + } + if (strtol(args.Arg(1), nullptr, 10) == 0x0) + { + force_healing_target = 0; return; } for (int i = 1; i <= 32 && i < HIGHEST_ENTITY; i++) diff --git a/src/hacks/Backtrack.cpp b/src/hacks/Backtrack.cpp index 7e89a200..5a20db37 100644 --- a/src/hacks/Backtrack.cpp +++ b/src/hacks/Backtrack.cpp @@ -9,6 +9,7 @@ #include "hacks/Backtrack.hpp" #include #include +#define IsMelee GetWeaponMode() == weapon_melee namespace hacks::shared::backtrack { @@ -105,7 +106,7 @@ void Run() float bestFov = 99999; BestTick = 0; iBestTarget = -1; - bool IsMelee = GetWeaponMode() == weapon_melee; + float prev_distance = 9999; for (int i = 1; i < g_IEngine->GetMaxClients(); i++) @@ -157,18 +158,23 @@ void Run() { int bestTick = 0; float tempFOV = 9999; - float bestFOV = 40.0f; + float bestFOV = 180.0f; float distance, prev_distance_ticks = 9999; + for (int i = 0; i < 12; ++i) + sorted_ticks[i] = BestTickData{FLT_MAX, i}; for (int t = 0; t < ticks; ++t) - sorted_ticks[t] = - BestTickData{ headPositions[iBestTarget][t].tickcount, t }; + { + if (headPositions[iBestTarget][t].tickcount) + sorted_ticks[t] = + BestTickData{ headPositions[iBestTarget][t].tickcount, t }; + } std::sort(sorted_ticks, sorted_ticks + ticks); for (int t = 0; t < ticks; ++t) { bool good_tick = false; for (int i = 0; i < 12; ++i) - if (t == sorted_ticks[i].tick) + if (t == sorted_ticks[i].tick && sorted_ticks[i].tickcount != FLT_MAX) good_tick = true; if (!good_tick) continue; diff --git a/src/hacks/FollowBot.cpp b/src/hacks/FollowBot.cpp index 6ea39c1b..0f70ae95 100644 --- a/src/hacks/FollowBot.cpp +++ b/src/hacks/FollowBot.cpp @@ -183,7 +183,7 @@ void WorldTick() if (CE_BAD(entity)) // Exist + dormant continue; if (i == follow_target) - break; + continue; if (entity->m_Type() != ENTITY_PLAYER) continue; if (steamid != entity->player_info.friendsID) // steamid check @@ -209,11 +209,11 @@ void WorldTick() } // If we dont have a follow target from that, we look again for someone // else who is suitable - if ((!follow_target || change || ClassPriority(ENTITY(follow_target)) < 6) && roambot) + if ((!follow_target || change || (ClassPriority(ENTITY(follow_target)) < 6 && ENTITY(follow_target)->player_info.friendsID != steamid)) && roambot) { // Try to get a new target - auto ent_count = HIGHEST_ENTITY; - for (int i = 0; i < HIGHEST_ENTITY; i++) + auto ent_count = followcart ? HIGHEST_ENTITY : g_IEngine->GetMaxClients(); + for (int i = 0; i < ent_count; i++) { auto entity = ENTITY(i); if (CE_BAD(entity)) // Exist + dormant diff --git a/src/helpers.cpp b/src/helpers.cpp index d7153cec..a4fbc037 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -146,7 +146,7 @@ Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist, break; } // check if player can see the players virtualOrigin - if (!IsVectorVisible(origin, virtualOrigin)) + if (!IsVectorVisible(origin, virtualOrigin, true)) continue; // check if the virtualOrigin can see the target if (!VisCheckEntFromEntVector(virtualOrigin, player, target)) @@ -976,15 +976,20 @@ netvar.iHealth)); return buf; }*/ -bool IsVectorVisible(Vector origin, Vector target) +bool IsVectorVisible(Vector origin, Vector target, bool enviroment_only) { trace_t trace_visible; Ray_t ray; trace::filter_no_player.SetSelf(RAW_ENT(g_pLocalPlayer->entity)); ray.Init(origin, target); - g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_player, + if (!enviroment_only) + g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_player, &trace_visible); + else + g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_no_player, + &trace_visible); + return (trace_visible.fraction == 1.0f); } diff --git a/src/hooks/LevelInit.cpp b/src/hooks/LevelInit.cpp index 27bba554..45b4bdd9 100644 --- a/src/hooks/LevelInit.cpp +++ b/src/hooks/LevelInit.cpp @@ -97,20 +97,13 @@ DEFINE_HOOKED_METHOD(LevelInit, void, void *this_, const char *name) hacks::shared::lagexploit::bcalled = false; #endif #if ENABLE_VISUALS - typedef bool *(*LoadNamedSkys_Fn)(const char *); + typedef bool (*LoadNamedSkys_Fn)(const char *); uintptr_t addr = gSignatures.GetEngineSignature( "55 89 E5 57 31 FF 56 8D B5 ? ? ? ? 53 81 EC 6C 01 00 00"); static LoadNamedSkys_Fn LoadNamedSkys = LoadNamedSkys_Fn(addr); bool succ; logging::Info("Going to load the skybox"); -#ifdef __clang__ - asm("movl %1, %%edi; push skynum[(int) skybox_changer]; call %%edi; mov " - "%%eax, %0; add %%esp, 4h" - : "=r"(succ) - : "r"(LoadNamedSkys)); -#else succ = LoadNamedSkys(skynum[(int) skybox_changer]); -#endif logging::Info("Loaded Skybox: %s", succ ? "true" : "false"); ConVar *holiday = g_ICvar->FindVar("tf_forced_holiday"); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index f3a230a1..6140d810 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -7,6 +7,11 @@ #include "common.hpp" +CatCommand printfov( + "fov_print", "Dump achievements to file (development)", []() { + if (CE_GOOD(LOCAL_E)) + logging::Info("%d", CE_INT(LOCAL_E, netvar.iFOV)); + }); void LocalPlayer::Update() { CachedEntity *wep; @@ -40,7 +45,7 @@ void LocalPlayer::Update() health = CE_INT(entity, netvar.iHealth); this->bUseSilentAngles = false; bZoomed = CE_INT(entity, netvar.iFOV) == - 20; //!= NET_INT(entity, netvar.iDefaultFOV); + 20.0f; //!= NET_INT(entity, netvar.iDefaultFOV); if (bZoomed) { if (flZoomBegin == 0.0f) diff --git a/src/reclasses/CTFPartyClient.cpp b/src/reclasses/CTFPartyClient.cpp index b98f110c..1a17a917 100644 --- a/src/reclasses/CTFPartyClient.cpp +++ b/src/reclasses/CTFPartyClient.cpp @@ -58,7 +58,7 @@ int re::CTFPartyClient::LoadSavedCasualCriteria() { typedef int (*LoadSavedCasualCriteria_t)(re::CTFPartyClient *); uintptr_t addr = gSignatures.GetClientSignature( - "55 89 E5 83 EC ? 8B 45 ? 8B 50 ? C6 80"); + "55 89 E5 8B 45 ? 5D 8B 80 ? ? ? ? C3 66 90 55 89 E5 8B 45 ? 5D 0F B6 80 ? ? ? ? C3 90 55 89 E5 56") - 0x40; LoadSavedCasualCriteria_t LoadSavedCasualCriteria_fn = LoadSavedCasualCriteria_t(addr); diff --git a/src/trace.cpp b/src/trace.cpp index 07c0dfdc..381dd08d 100755 --- a/src/trace.cpp +++ b/src/trace.cpp @@ -79,6 +79,7 @@ void trace::FilterNoPlayer::SetSelf(IClientEntity *self) bool trace::FilterNoPlayer::ShouldHitEntity(IHandleEntity *handle, int mask) { + return false; IClientEntity *entity; ClientClass *clazz;