From d3ddcf37b6f0bafe81ce3ff709e9aa56cac63a76 Mon Sep 17 00:00:00 2001 From: LightCat Date: Sun, 2 Sep 2018 14:23:24 +0200 Subject: [PATCH] fixes and stuff --- include/navparser.hpp | 1 + src/PlayerTools.cpp | 3 +- src/core/netvars.cpp | 2 +- src/hacks/AutoBackstab.cpp | 3 +- src/hacks/Backtrack.cpp | 51 ++++++++++++++++++------------- src/hacks/CatBot.cpp | 10 ++++-- src/hacks/ESP.cpp | 11 ++++--- src/hacks/NavBot.cpp | 21 ++++++++++++- src/helpers.cpp | 1 - src/hooks/DispatchUserMessage.cpp | 34 ++++++++++++--------- src/hooks/Shutdown.cpp | 27 +++++++++++++++- src/navparser.cpp | 42 +++++++++++++++++++++++-- src/votelogger.cpp | 14 ++++++--- 13 files changed, 165 insertions(+), 55 deletions(-) diff --git a/include/navparser.hpp b/include/navparser.hpp index b117f18d..2e45065f 100644 --- a/include/navparser.hpp +++ b/include/navparser.hpp @@ -27,6 +27,7 @@ void Draw(); int FindInVector(size_t id); int FindNearestValid(Vector vec); +int FindNearestValidbyDist(Vector vec, float mindist, float maxdist); class inactivityTracker { diff --git a/src/PlayerTools.cpp b/src/PlayerTools.cpp index ce651f94..9bdb1503 100644 --- a/src/PlayerTools.cpp +++ b/src/PlayerTools.cpp @@ -48,7 +48,8 @@ IgnoreReason shouldTargetSteamId(unsigned id) } auto &pl = playerlist::AccessData(id); - if (playerlist::IsFriendly(pl.state) || (pl.state == playerlist::k_EState::CAT && *ignoreCathook)) + if (playerlist::IsFriendly(pl.state) || + (pl.state == playerlist::k_EState::CAT && *ignoreCathook)) return IgnoreReason::LOCAL_PLAYER_LIST; #if ENABLE_ONLINE auto *co = online::getUserData(id); diff --git a/src/core/netvars.cpp b/src/core/netvars.cpp index 12e60810..75865a33 100644 --- a/src/core/netvars.cpp +++ b/src/core/netvars.cpp @@ -125,7 +125,7 @@ void NetVars::Init() this->m_iObjectType = gNetvars.get_offset("DT_BaseObject", "m_iObjectType"); this->m_bMiniBuilding = - gNetvars.get_offset("DT_BaseObject", "m_bMiniBuilding"); + gNetvars.get_offset("DT_BaseObject", "m_bMiniBuilding"); this->m_iTeleState = gNetvars.get_offset("DT_ObjectTeleporter", "m_iState"); this->m_flTeleRechargeTime = diff --git a/src/hacks/AutoBackstab.cpp b/src/hacks/AutoBackstab.cpp index 7f1975bf..ac7bf662 100644 --- a/src/hacks/AutoBackstab.cpp +++ b/src/hacks/AutoBackstab.cpp @@ -218,7 +218,8 @@ void CreateMove() for (angle.y = -180.0f; angle.y < 180.0f; angle.y += 20.0f) { - if (unifiedCanBackstab(besttarget, angle, i.entorigin, i.collidable.min, i.collidable.max)) + if (unifiedCanBackstab(besttarget, angle, i.entorigin, + i.collidable.min, i.collidable.max)) { current_user_cmd->tick_count = i.tickcount; current_user_cmd->viewangles = angle; diff --git a/src/hacks/Backtrack.cpp b/src/hacks/Backtrack.cpp index cfdd10e8..e4347f0c 100644 --- a/src/hacks/Backtrack.cpp +++ b/src/hacks/Backtrack.cpp @@ -124,7 +124,7 @@ void Run() float _viewangles = CE_VECTOR(pEntity, netvar.m_angEyeAngles).y; float viewangles = (_viewangles > 180) ? _viewangles - 360 : _viewangles; - float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime); + float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime); Vector ent_orig = pEntity->InternalEntity()->GetAbsOrigin(); std::array hbdArray; for (size_t i = 0; i < hbdArray.max_size(); i++) @@ -135,15 +135,21 @@ void Run() } hitboxData collidable{}; { - collidable.min = RAW_ENT(pEntity)->GetCollideable()->OBBMins() + ent_orig; - collidable.max = RAW_ENT(pEntity)->GetCollideable()->OBBMaxs() + ent_orig; - collidable.center = (collidable.min + collidable.max)/2; + collidable.min = + RAW_ENT(pEntity)->GetCollideable()->OBBMins() + ent_orig; + collidable.max = + RAW_ENT(pEntity)->GetCollideable()->OBBMaxs() + ent_orig; + collidable.center = (collidable.min + collidable.max) / 2; } auto hdr = g_IModelInfo->GetStudiomodel(RAW_ENT(pEntity)->GetModel()); headPositions[i][cmd->command_number % getTicks()] = - BacktrackData{ cmd->tick_count, hbdArray, collidable, - viewangles, simtime, - ent_orig, cmd->command_number % getTicks() }; + BacktrackData{ cmd->tick_count, + hbdArray, + collidable, + viewangles, + simtime, + ent_orig, + cmd->command_number % getTicks() }; } if (iBestTarget != -1 && CanShoot()) { @@ -265,23 +271,24 @@ bool ValidTick(BacktrackData &i, CachedEntity *ent) { // TODO: Fix this func - -// if (istickvalid[ent->m_IDX][i.index]) -// return true; -// if (istickinvalid[ent->m_IDX][i.index]) -// return false; -// if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center, true)) -// if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * 1000.0f - -// getLatency() - i.simtime * 1000.0f) <= 200.0f) -// { -// istickvalid[ent->m_IDX][i.index] = true; -// return true; -// } -// istickinvalid[ent->m_IDX][i.index] = true; -// return false; + // if (istickvalid[ent->m_IDX][i.index]) + // return true; + // if (istickinvalid[ent->m_IDX][i.index]) + // return false; + // if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center, + // true)) + // if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * + // 1000.0f - + // getLatency() - i.simtime * 1000.0f) <= 200.0f) + // { + // istickvalid[ent->m_IDX][i.index] = true; + // return true; + // } + // istickinvalid[ent->m_IDX][i.index] = true; + // return false; if (!(fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * 1000.0f - - getLatency() - i.simtime * 1000.0f) < 200.0f)) + getLatency() - i.simtime * 1000.0f) < 200.0f)) return false; return true; } diff --git a/src/hacks/CatBot.cpp b/src/hacks/CatBot.cpp index 72911cee..bfa37610 100644 --- a/src/hacks/CatBot.cpp +++ b/src/hacks/CatBot.cpp @@ -78,8 +78,9 @@ void do_random_votekick() { std::vector targets; player_info_s local_info; - - if (CE_BAD(LOCAL_E) || !g_IEngine->GetPlayerInfo(LOCAL_E->m_IDX, &local_info)) + + if (CE_BAD(LOCAL_E) || + !g_IEngine->GetPlayerInfo(LOCAL_E->m_IDX, &local_info)) return; for (int i = 1; i <= g_GlobalVars->maxClients; ++i) { @@ -92,7 +93,10 @@ void do_random_votekick() continue; if (info.friendsID == local_info.friendsID) continue; - if (playerlist::AccessData(info.friendsID).state != playerlist::k_EState::RAGE && playerlist::AccessData(info.friendsID).state != playerlist::k_EState::DEFAULT) + if (playerlist::AccessData(info.friendsID).state != + playerlist::k_EState::RAGE && + playerlist::AccessData(info.friendsID).state != + playerlist::k_EState::DEFAULT) continue; targets.push_back(info.userID); diff --git a/src/hacks/ESP.cpp b/src/hacks/ESP.cpp index ecb10a33..9c865ea6 100644 --- a/src/hacks/ESP.cpp +++ b/src/hacks/ESP.cpp @@ -260,7 +260,7 @@ void CreateMove() ResetEntityStrings(); // Clear any strings entities have entities_need_repaint.clear(); // Clear data on entities that need redraw int max_clients = g_IEngine->GetMaxClients(); - int limit = HIGHEST_ENTITY; + int limit = HIGHEST_ENTITY; // If not using any other special esp, we lower the min to the max clients if (!buildings && !proj_esp && !item_esp) @@ -1037,7 +1037,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent) ? "Teleporter" : (classid == CL_CLASS(CObjectSentrygun) ? "Sentry Gun" : "Dispenser")); - int level = CE_INT(ent, netvar.iUpgradeLevel); + int level = CE_INT(ent, netvar.iUpgradeLevel); int IsMini = CE_INT(ent, netvar.m_bMiniBuilding); if (!IsMini) AddEntityString(ent, format("LV ", level, ' ', name)); @@ -1045,14 +1045,17 @@ void _FASTCALL ProcessEntity(CachedEntity *ent) AddEntityString(ent, format("Mini ", name)); if (classid == CL_CLASS(CObjectTeleporter)) { - float next_teleport = CE_FLOAT(ent, netvar.m_flTeleRechargeTime); + float next_teleport = + CE_FLOAT(ent, netvar.m_flTeleRechargeTime); float yaw_to_exit = CE_FLOAT(ent, netvar.m_flTeleYawToExit); if (yaw_to_exit) { if (next_teleport < g_GlobalVars->curtime) AddEntityString(ent, "Ready"); else - AddEntityString(ent, format(next_teleport - g_GlobalVars->curtime, "s")); + AddEntityString( + ent, + format(next_teleport - g_GlobalVars->curtime, "s")); } } } diff --git a/src/hacks/NavBot.cpp b/src/hacks/NavBot.cpp index 46d56187..6319a86f 100644 --- a/src/hacks/NavBot.cpp +++ b/src/hacks/NavBot.cpp @@ -6,6 +6,7 @@ #include "navparser.hpp" #include "FollowBot.hpp" #include "NavBot.hpp" +#include "PlayerTools.hpp" namespace hacks::tf2::NavBot { @@ -16,6 +17,7 @@ static settings::Bool engi_mode("navbot.engi-mode", "false"); static settings::Bool primary_only("navbot.primary-only", "true"); static settings::Bool target_sentry{ "navbot.target-sentry", "true" }; +static settings::Bool stay_near{ "navbot.stay-near", "false" }; static settings::Bool take_tele{ "navbot.take-teleporters", "true" }; static settings::Bool enable_fb{ "navbot.medbot", "false" }; static settings::Bool roambot{ "navbot.roaming", "true" }; @@ -158,6 +160,9 @@ CachedEntity *NearestEnemy() CachedEntity *ent = ENTITY(i); if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER) continue; + if (player_tools::shouldTarget(ent) != + player_tools::IgnoreReason::DO_NOT_IGNORE) + continue; if (ent == LOCAL_E || !ent->m_bAlivePlayer() || ent->m_iTeam() == LOCAL_E->m_iTeam()) continue; @@ -357,7 +362,21 @@ bool NavToSniperSpot(int priority) bool use_preferred = !preferred_sniper_spots.empty(); auto snip_spot = use_preferred ? preferred_sniper_spots : sniper_spots; bool toret = false; - + if (*stay_near) + { + CachedEntity *ent = NearestEnemy(); + if (CE_GOOD(ent)) + { + int nearestvalid = + nav::FindNearestValidbyDist(ent->m_vecOrigin(), 1000, 4000); + if (nearestvalid != -1) + { + auto area = nav::areas[nearestvalid]; + nav::NavTo(area.m_center, false, true, priority); + return true; + } + } + } if (use_preferred) { int best_spot = -1; diff --git a/src/helpers.cpp b/src/helpers.cpp index 3be70926..244ce1b9 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -1158,7 +1158,6 @@ void WhatIAmLookingAt(int *result_eindex, Vector *result_pos) *result_eindex = -1; if (trace.m_pEnt && result_eindex) *result_eindex = ((IClientEntity *) (trace.m_pEnt))->entindex(); - } bool IsSentryBuster(CachedEntity *entity) diff --git a/src/hooks/DispatchUserMessage.cpp b/src/hooks/DispatchUserMessage.cpp index 4a72250a..4f13f3be 100644 --- a/src/hooks/DispatchUserMessage.cpp +++ b/src/hooks/DispatchUserMessage.cpp @@ -218,8 +218,8 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type, } } #if !LAGBOT_MODE -if (*identify && sendmsg.test_and_set(300000)) - chat_stack::Say("!!meow"); + if (*identify && sendmsg.test_and_set(300000)) + chat_stack::Say("!!meow"); #endif if (crypt_chat) { @@ -229,24 +229,30 @@ if (*identify && sendmsg.test_and_set(300000)) { std::string msg = ucccccp::decrypt(message); #if !LAGBOT_MODE -// if (ucccccp::decrypt(message) == "meow" && -// hacks::shared::antiaim::communicate && -// data[0] != LOCAL_E->m_IDX && -// playerlist::AccessData(ENTITY(data[0])).state != -// playerlist::k_EState::CAT) -// { -// playerlist::AccessData(ENTITY(data[0])).state = -// playerlist::k_EState::CAT; -// chat_stack::Say("!!meow"); -// } + // if (ucccccp::decrypt(message) + // == "meow" && + // hacks::shared::antiaim::communicate + // && data[0] != + // LOCAL_E->m_IDX && + // playerlist::AccessData(ENTITY(data[0])).state + // != + // playerlist::k_EState::CAT) + // { + // playerlist::AccessData(ENTITY(data[0])).state + // = + // playerlist::k_EState::CAT; + // chat_stack::Say("!!meow"); + // } CachedEntity *ent = ENTITY(data[0]); - if (msg != "Attempt at ucccccping and failing" && msg != "Unsupported version" && ent != LOCAL_E) + if (msg != "Attempt at ucccccping and failing" && + msg != "Unsupported version" && ent != LOCAL_E) { auto &state = playerlist::AccessData(ent).state; if (state == playerlist::k_EState::DEFAULT) { state = playerlist::k_EState::CAT; - if (*answerIdentify && sendmsg.test_and_set(5000)) + if (*answerIdentify && + sendmsg.test_and_set(5000)) chat_stack::Say("!!meow"); } } diff --git a/src/hooks/Shutdown.cpp b/src/hooks/Shutdown.cpp index 80ad2fb4..4f39f932 100644 --- a/src/hooks/Shutdown.cpp +++ b/src/hooks/Shutdown.cpp @@ -21,7 +21,32 @@ DEFINE_HOOKED_METHOD(Shutdown, void, INetChannel *this_, const char *reason) // This is a INetChannel hook - it SHOULDN'T be static because netchannel // changes. logging::Info("Disconnect: %s", reason); - if (strstr(reason, "banned") || strstr(reason, "Generic_Kicked")) + if (strstr(reason, "Generic_Kicked")) + { + if (die_if_vac) { + static uintptr_t addr = + gSignatures.GetClientSignature("C7 04 24 ? ? ? ? 8D 7D ? 31 F6"); + static uintptr_t offset0 = uintptr_t(*(uintptr_t *) (addr + 0x3)); + static uintptr_t offset1 = gSignatures.GetClientSignature( + "55 89 E5 83 EC ? 8B 45 ? 8B 80 ? ? ? ? 85 C0 74 ? C7 44 24 ? ? ? ? ? " + "89 04 24 E8 ? ? ? ? 85 C0 74 ? 8B 40"); + typedef int (*GetPendingInvites_t)(uintptr_t); + GetPendingInvites_t GetPendingInvites = GetPendingInvites_t(offset1); + int invites = GetPendingInvites(offset0); + + re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem(); + re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient(); + if (gc && !gc->BConnectedToMatchServer(false) && !gc->BHaveLiveMatch() && + !invites) + if (!(pc && pc->BInQueueForMatchGroup(tfmm::getQueue()))) + { + logging::Info("VAC/Matchmaking banned"); + *(int *) 0 = 0; + exit(1); + } + } + } + if (strstr(reason, "banned")) { if (die_if_vac) { diff --git a/src/navparser.cpp b/src/navparser.cpp index b0390aaf..7f966aad 100644 --- a/src/navparser.cpp +++ b/src/navparser.cpp @@ -28,6 +28,44 @@ int FindInVector(size_t id) } static int bestarea = -1; Timer reselect{}; +int FindNearestValidbyDist(Vector vec, float mindist, float maxdist) +{ + if (reselect.test_and_set(500)) + { + float bestscr = FLT_MAX; + if (bestarea != -1) + { + bool success = false; + Vector area = areas[bestarea].m_center; + float scr = area.DistTo(vec); + if (scr < maxdist && scr > mindist) + if (IsVectorVisible(vec, area, false)) + success = true; + if (!success) + bestarea = -1; + } + else + { + bestarea = -1; + for (int ar = 0; ar < areas.size(); ar++) + { + Vector area = areas[ar].m_center; + area.z += 72.0f; + float scr = area.DistTo(vec); + if (scr > maxdist || scr < mindist) + continue; + if (scr > bestscr) + continue; + if (IsVectorVisible(vec, area, false)) + { + bestscr = scr; + bestarea = ar; + } + } + } + } + return bestarea; +} int FindNearestValid(Vector vec) { if (reselect.test_and_set(500)) @@ -238,8 +276,8 @@ static std::vector crumbs; static bool ensureArrival; // Priority value for current instructions, only higher or equal priorites can // overwrite it -int priority = 0; -static Vector lastArea = { 0.0f, 0.0f, 0.0f }; +int priority = 0; +static Vector lastArea = { 0.0f, 0.0f, 0.0f }; static int persistentTries = 0; // dest = Destination, navToLocalCenter = Should bot travel to local center diff --git a/src/votelogger.cpp b/src/votelogger.cpp index 69eaf9a9..c539e74f 100644 --- a/src/votelogger.cpp +++ b/src/votelogger.cpp @@ -10,8 +10,8 @@ #include static settings::Bool requeue{ "hack.requeue-on-kick", "false" }; -static settings::Bool vote_kicky{"hack.autovote.yes", "false"}; -static settings::Bool vote_kickn{"hack.autovote.no", "false"}; +static settings::Bool vote_kicky{ "hack.autovote.yes", "false" }; +static settings::Bool vote_kickn{ "hack.autovote.no", "false" }; namespace votelogger { @@ -47,10 +47,16 @@ void dispatchUserMessage(bf_read &buffer, int type) if (eid == LOCAL_E->m_IDX) was_local_player = true; if (*vote_kickn) - if (playerlist::AccessData(info.friendsID).state != playerlist::k_EState::RAGE && playerlist::AccessData(info.friendsID).state != playerlist::k_EState::DEFAULT) + if (playerlist::AccessData(info.friendsID).state != + playerlist::k_EState::RAGE && + playerlist::AccessData(info.friendsID).state != + playerlist::k_EState::DEFAULT) g_IEngine->ClientCmd_Unrestricted("vote option2"); if (*vote_kicky) - if (playerlist::AccessData(info.friendsID).state == playerlist::k_EState::RAGE || playerlist::AccessData(info.friendsID).state == playerlist::k_EState::DEFAULT) + if (playerlist::AccessData(info.friendsID).state == + playerlist::k_EState::RAGE || + playerlist::AccessData(info.friendsID).state == + playerlist::k_EState::DEFAULT) g_IEngine->ClientCmd_Unrestricted("vote option1"); logging::Info("Vote called to kick %s [U:1:%u] for %s", name, steamID, reason);