This commit is contained in:
LightCat 2018-09-15 12:13:42 +02:00
parent 82162ed97a
commit d4bc116a57
16 changed files with 85 additions and 64 deletions

View File

@ -11,7 +11,7 @@
class HookedFunction; class HookedFunction;
namespace HookTools namespace HookTools
{ {
std::vector<HookedFunction*> &GetHookedFunctions(); std::vector<HookedFunction *> &GetHookedFunctions();
void CM(); void CM();
} // namespace HookTools } // namespace HookTools
@ -27,7 +27,8 @@ class HookedFunction
std::string m_name; std::string m_name;
std::function<void()> m_func; std::function<void()> m_func;
HookedFunctions_types m_type; HookedFunctions_types m_type;
void init(HookedFunctions_types type, std::string name, int priority, std::function<void()> func) void init(HookedFunctions_types type, std::string name, int priority,
std::function<void()> func)
{ {
switch (type) switch (type)
{ {
@ -44,6 +45,7 @@ class HookedFunction
m_type = type; m_type = type;
HookTools::GetHookedFunctions().push_back(this); HookTools::GetHookedFunctions().push_back(this);
} }
public: public:
int m_priority; int m_priority;
void run(HookedFunctions_types type) void run(HookedFunctions_types type)
@ -57,16 +59,19 @@ public:
m_func(); m_func();
} }
} }
HookedFunction(HookedFunctions_types type, std::string name, int priority, std::function<void()> func) HookedFunction(HookedFunctions_types type, std::string name, int priority,
std::function<void()> func)
{ {
init(type, name, priority, func); init(type, name, priority, func);
} }
HookedFunction(HookedFunctions_types type, int priority, std::function<void()> func) HookedFunction(HookedFunctions_types type, int priority,
std::function<void()> func)
{ {
static const std::string name("UNNAMED_FUNCTIONS"); static const std::string name("UNNAMED_FUNCTIONS");
init(type, name, priority, func); init(type, name, priority, func);
} }
HookedFunction(HookedFunctions_types type, std::string name, std::function<void()> func) HookedFunction(HookedFunctions_types type, std::string name,
std::function<void()> func)
{ {
int priority = 5; int priority = 5;
init(type, name, priority, func); init(type, name, priority, func);

View File

@ -25,13 +25,14 @@ CatCommand test("crit_debug_print", "debug", []() {
return; return;
if (CE_BAD(LOCAL_W)) if (CE_BAD(LOCAL_W))
return; return;
unsigned unk1 = *(unsigned *)(RAW_ENT(LOCAL_W) + 2832); unsigned unk1 = *(unsigned *) (RAW_ENT(LOCAL_W) + 2832);
unsigned unk2 = *(unsigned *)(RAW_ENT(LOCAL_W) + 2820); unsigned unk2 = *(unsigned *) (RAW_ENT(LOCAL_W) + 2820);
unsigned char CritSlots = *(unsigned char *)(unk1 + (unk2 << 6) + 1844); unsigned char CritSlots = *(unsigned char *) (unk1 + (unk2 << 6) + 1844);
int CritSlots2 = *(unsigned *)(unk1 + (unk2 << 6) + 1788); int CritSlots2 = *(unsigned *) (unk1 + (unk2 << 6) + 1788);
unsigned CritSlots3 = *(unsigned *)(unk1 + (unk2 << 6) + 1788); unsigned CritSlots3 = *(unsigned *) (unk1 + (unk2 << 6) + 1788);
int CritSlots4 = *(int *)(unk1 + (unk2 << 6) + 1788); int CritSlots4 = *(int *) (unk1 + (unk2 << 6) + 1788);
logging::Info("%u %d %d %u %d", unk1, int(CritSlots), CritSlots2, CritSlots3, CritSlots4); logging::Info("%u %d %d %u %d", unk1, int(CritSlots), CritSlots2,
CritSlots3, CritSlots4);
}); });
int find_next_random_crit_for_weapon(IClientEntity *weapon) int find_next_random_crit_for_weapon(IClientEntity *weapon)
{ {

View File

@ -219,13 +219,14 @@ void reportall()
player_info_s info; player_info_s info;
if (g_IEngine->GetPlayerInfo(i, &info)) if (g_IEngine->GetPlayerInfo(i, &info))
{ {
// if (info.friendsID == local.friendsID || // if (info.friendsID == local.friendsID ||
// playerlist::AccessData(info.friendsID).state == // playerlist::AccessData(info.friendsID).state ==
// playerlist::k_EState::FRIEND || // playerlist::k_EState::FRIEND ||
// playerlist::AccessData(info.friendsID).state == // playerlist::AccessData(info.friendsID).state ==
// playerlist::k_EState::IPC) // playerlist::k_EState::IPC)
// continue; // continue;
if (player_tools::shouldTargetSteamId(info.friendsID) != player_tools::IgnoreReason::DO_NOT_IGNORE) if (player_tools::shouldTargetSteamId(info.friendsID) !=
player_tools::IgnoreReason::DO_NOT_IGNORE)
continue; continue;
CSteamID id(info.friendsID, EUniverse::k_EUniversePublic, CSteamID id(info.friendsID, EUniverse::k_EUniversePublic,
EAccountType::k_EAccountTypeIndividual); EAccountType::k_EAccountTypeIndividual);
@ -251,14 +252,17 @@ void smart_crouch()
for (int i = 0; i < g_IEngine->GetMaxClients(); i++) for (int i = 0; i < g_IEngine->GetMaxClients(); i++)
{ {
auto ent = ENTITY(i); auto ent = ENTITY(i);
if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER || ent->m_iTeam() == LOCAL_E->m_iTeam() || if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER ||
ent->m_iTeam() == LOCAL_E->m_iTeam() ||
!(ent->hitboxes.GetHitbox(0)) || !(ent->m_bAlivePlayer()) || !(ent->hitboxes.GetHitbox(0)) || !(ent->m_bAlivePlayer()) ||
player_tools::shouldTargetSteamId(ent->player_info.friendsID) != player_tools::IgnoreReason::DO_NOT_IGNORE || player_tools::shouldTargetSteamId(ent->player_info.friendsID) !=
player_tools::IgnoreReason::DO_NOT_IGNORE ||
should_ignore_player(ent)) should_ignore_player(ent))
continue; continue;
bool failedvis = false; bool failedvis = false;
for (int j = 0; j < 18; j++) for (int j = 0; j < 18; j++)
if (IsVectorVisible(g_pLocalPlayer->v_Eye, ent->hitboxes.GetHitbox(j)->center)) if (IsVectorVisible(g_pLocalPlayer->v_Eye,
ent->hitboxes.GetHitbox(j)->center))
failedvis = true; failedvis = true;
if (failedvis) if (failedvis)
continue; continue;
@ -286,8 +290,7 @@ void smart_crouch()
} }
// TODO: add more stuffs // TODO: add more stuffs
static HookedFunction cm(HF_CreateMove, "catbot", 5, []() static HookedFunction cm(HF_CreateMove, "catbot", 5, []() {
{
if (!*enable) if (!*enable)
return; return;

View File

@ -15,7 +15,7 @@ Vector maxp[32];
bool drawEsp[32]; bool drawEsp[32];
#if ENABLE_VISUALS #if ENABLE_VISUALS
static HookedFunction cm(HF_CreateMove, "lightesp", 5, [](){ static HookedFunction cm(HF_CreateMove, "lightesp", 5, []() {
if (!*enable) if (!*enable)
return; return;
for (int i = 1; i < g_IEngine->GetMaxClients(); i++) for (int i = 1; i < g_IEngine->GetMaxClients(); i++)

View File

@ -363,7 +363,7 @@ bool NavToEnemy()
if (CE_GOOD(ent)) if (CE_GOOD(ent))
{ {
int nearestvalid = int nearestvalid =
nav::FindNearestValidbyDist(ent->m_vecOrigin(), 1000, 4000); nav::FindNearestValidbyDist(ent->m_vecOrigin(), 1000, 4000);
if (nearestvalid != -1) if (nearestvalid != -1)
{ {
auto area = nav::areas[nearestvalid]; auto area = nav::areas[nearestvalid];
@ -445,7 +445,8 @@ void CreateMove()
return; return;
if (primary_only && enable) if (primary_only && enable)
UpdateSlot(); UpdateSlot();
if (*stay_near && nav_enemy_cd.test_and_set(1000) && (!HasLowAmmo()) & (!HasLowHealth())) if (*stay_near && nav_enemy_cd.test_and_set(1000) &&
(!HasLowAmmo()) & (!HasLowHealth()))
NavToEnemy(); NavToEnemy();
if (HasLowHealth() && cdr.test_and_set(5000)) if (HasLowHealth() && cdr.test_and_set(5000))
{ {

View File

@ -392,7 +392,8 @@ bool isActive()
const std::vector<std::string> builtin_default = { const std::vector<std::string> builtin_default = {
"Cathook - more fun than a ball of yarn!", "GNU/Linux is the best OS!", "Cathook - more fun than a ball of yarn!", "GNU/Linux is the best OS!",
"Visit https://github.com/nullworks/cathook for more information!", "Visit https://github.com/nullworks/cathook for more information!",
"Cathook - Free and Open-Source tf2 cheat!", "Cathook - ca(n)t stop me meow!" "Cathook - Free and Open-Source tf2 cheat!",
"Cathook - ca(n)t stop me meow!"
}; };
const std::vector<std::string> builtin_lennyfaces = { const std::vector<std::string> builtin_lennyfaces = {
"( ͡° ͜ʖ ͡°)", "( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)", "( ͡° ͜ʖ ͡°)", "( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)",

View File

@ -330,7 +330,7 @@ bool IsTargetStateGood(CachedEntity *entity)
// return false // return false
Vector hit; Vector hit;
if (!CheckLineBox(minz, maxz, g_pLocalPlayer->v_Eye, forward, if (!CheckLineBox(minz, maxz, g_pLocalPlayer->v_Eye, forward,
hit)) hit))
return false; return false;
} }
} }

View File

@ -452,27 +452,28 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time,
if (roll_speedhack && cmd->buttons & IN_DUCK && if (roll_speedhack && cmd->buttons & IN_DUCK &&
!(cmd->buttons & IN_ATTACK)) !(cmd->buttons & IN_ATTACK))
{ {
speed = Vector{cmd->forwardmove, cmd->sidemove, 0.0f}.Length(); speed = Vector{ cmd->forwardmove, cmd->sidemove, 0.0f }.Length();
static float prevspeedang = 0.0f; static float prevspeedang = 0.0f;
if (fabs(speed) > 0.0f) if (fabs(speed) > 0.0f)
{ {
Vector vecMove( cmd->forwardmove, cmd->sidemove, 0.0f ); Vector vecMove(cmd->forwardmove, cmd->sidemove, 0.0f);
vecMove *= -1; vecMove *= -1;
float flLength = vecMove.Length(); float flLength = vecMove.Length();
Vector angMoveReverse{}; Vector angMoveReverse{};
VectorAngles( vecMove, angMoveReverse ); VectorAngles(vecMove, angMoveReverse);
cmd->forwardmove = -flLength; cmd->forwardmove = -flLength;
cmd->sidemove = 0.0f; // Move only backwards, no sidemove cmd->sidemove = 0.0f; // Move only backwards, no sidemove
float res = g_pLocalPlayer->v_OrigViewangles.y - angMoveReverse.y; float res =
g_pLocalPlayer->v_OrigViewangles.y - angMoveReverse.y;
while (res > 180) while (res > 180)
res -= 360; res -= 360;
while (res < -180) while (res < -180)
res += 360; res += 360;
if (res - prevspeedang > 90.0f) if (res - prevspeedang > 90.0f)
res = (res + prevspeedang) / 2; res = (res + prevspeedang) / 2;
prevspeedang = res; prevspeedang = res;
cmd->viewangles.y = res; cmd->viewangles.y = res;
cmd->viewangles.z = 90.0f; cmd->viewangles.z = 90.0f;
g_pLocalPlayer->bUseSilentAngles = true; g_pLocalPlayer->bUseSilentAngles = true;
speedapplied = true; speedapplied = true;

View File

@ -53,12 +53,14 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type,
for (int i = 0; i < buf.GetNumBytesLeft(); i++) for (int i = 0; i < buf.GetNumBytesLeft(); i++)
{ {
int byte = buf.ReadByte(); int byte = buf.ReadByte();
if ( byte == 0) if (byte == 0)
break; break;
message_name.push_back(byte); message_name.push_back(byte);
} }
if (message_name.find("TF_Autobalance_TeamChangePending") != std::string::npos) if (message_name.find("TF_Autobalance_TeamChangePending") !=
logging::Info("test, %d %d", int(message_name[0]), (CE_GOOD(LOCAL_E) ? LOCAL_E->m_IDX : -1)); std::string::npos)
logging::Info("test, %d %d", int(message_name[0]),
(CE_GOOD(LOCAL_E) ? LOCAL_E->m_IDX : -1));
} }
if (type == 4) if (type == 4)
{ {
@ -133,8 +135,9 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type,
} }
for (char i : name1) for (char i : name1)
{ {
if (i == ' '); if (i == ' ')
continue; ;
continue;
if (iii == 2) if (iii == 2)
{ {
iii = 0; iii = 0;
@ -151,8 +154,9 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type,
iii = 0; iii = 0;
for (char i : name1) for (char i : name1)
{ {
if (i == ' '); if (i == ' ')
continue; ;
continue;
if (iii == 3) if (iii == 3)
{ {
iii = 0; iii = 0;

View File

@ -1,8 +1,8 @@
#include "HookTools.hpp" #include "HookTools.hpp"
std::vector<HookedFunction*> &HookTools::GetHookedFunctions() std::vector<HookedFunction *> &HookTools::GetHookedFunctions()
{ {
static std::vector<HookedFunction*> CreateMoves{}; static std::vector<HookedFunction *> CreateMoves{};
return CreateMoves; return CreateMoves;
} }
@ -19,8 +19,8 @@ void HookTools::CM()
static InitRoutine init([]() { static InitRoutine init([]() {
auto &HookedFunctions = HookTools::GetHookedFunctions(); auto &HookedFunctions = HookTools::GetHookedFunctions();
std::sort(HookedFunctions.begin(), HookedFunctions.end(), std::sort(HookedFunctions.begin(), HookedFunctions.end(),
[](HookedFunction *a, HookedFunction *b){ [](HookedFunction *a, HookedFunction *b) {
return a->m_priority > b->m_priority; return a->m_priority > b->m_priority;
}); });
logging::Info("Sorted Hooked Functions: %i", HookedFunctions.size()); logging::Info("Sorted Hooked Functions: %i", HookedFunctions.size());
}); });

View File

@ -23,21 +23,25 @@ DEFINE_HOOKED_METHOD(Shutdown, void, INetChannel *this_, const char *reason)
logging::Info("Disconnect: %s", reason); logging::Info("Disconnect: %s", reason);
if (strstr(reason, "Generic_Kicked")) if (strstr(reason, "Generic_Kicked"))
{ {
if (*die_if_vac) { if (*die_if_vac)
static uintptr_t addr = {
gSignatures.GetClientSignature("C7 04 24 ? ? ? ? 8D 7D ? 31 F6"); 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 offset0 = uintptr_t(*(uintptr_t *) (addr + 0x3));
static uintptr_t offset1 = gSignatures.GetClientSignature( static uintptr_t offset1 = gSignatures.GetClientSignature(
"55 89 E5 83 EC ? 8B 45 ? 8B 80 ? ? ? ? 85 C0 74 ? C7 44 24 ? ? ? ? ? " "55 89 E5 83 EC ? 8B 45 ? 8B 80 ? ? ? ? 85 C0 74 ? C7 44 24 ? "
"89 04 24 E8 ? ? ? ? 85 C0 74 ? 8B 40"); "? ? ? ? "
"89 04 24 E8 ? ? ? ? 85 C0 74 ? 8B 40");
typedef int (*GetPendingInvites_t)(uintptr_t); typedef int (*GetPendingInvites_t)(uintptr_t);
GetPendingInvites_t GetPendingInvites = GetPendingInvites_t(offset1); GetPendingInvites_t GetPendingInvites =
GetPendingInvites_t(offset1);
int invites = GetPendingInvites(offset0); int invites = GetPendingInvites(offset0);
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem(); re::CTFGCClientSystem *gc =
re::CTFGCClientSystem::GTFGCClientSystem();
re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient(); re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient();
if (gc && !gc->BConnectedToMatchServer(false) && !gc->BHaveLiveMatch() && if (gc && !gc->BConnectedToMatchServer(false) &&
!invites) !gc->BHaveLiveMatch() && !invites)
if (!(pc && pc->BInQueueForMatchGroup(tfmm::getQueue()))) if (!(pc && pc->BInQueueForMatchGroup(tfmm::getQueue())))
{ {
logging::Info("VAC/Matchmaking banned"); logging::Info("VAC/Matchmaking banned");

2
src/settings/Settings.cpp Executable file → Normal file
View File

@ -6,5 +6,5 @@
namespace settings namespace settings
{ {
std::atomic<bool> RVarLock{false}; std::atomic<bool> RVarLock{ false };
} }

View File

@ -59,7 +59,7 @@ void startQueue()
if (*queue == 7) if (*queue == 7)
client->LoadSavedCasualCriteria(); client->LoadSavedCasualCriteria();
client->RequestQueueForMatch((int) queue); client->RequestQueueForMatch((int) queue);
//client->RequestQueueForStandby(); // client->RequestQueueForStandby();
queuecount++; queuecount++;
} }
else else

View File

@ -89,7 +89,8 @@ int prevcolor = -1;
rgba_t EffectChams::ChamsColor(IClientEntity *entity) rgba_t EffectChams::ChamsColor(IClientEntity *entity)
{ {
if (!isHackActive() || !*enable) if (!isHackActive() || !*enable)
return colors::empty;; return colors::empty;
;
CachedEntity *ent = ENTITY(entity->entindex()); CachedEntity *ent = ENTITY(entity->entindex());
if (disco_chams) if (disco_chams)
{ {

View File

@ -72,9 +72,8 @@ void DrawCheatVisuals()
GUIColor()); // github commit and date GUIColor()); // github commit and date
AddSideString(hack::GetType(), GUIColor()); // Compile type AddSideString(hack::GetType(), GUIColor()); // Compile type
#if ENABLE_GUI #if ENABLE_GUI
AddSideString( AddSideString("Press 'INSERT' key to open/close cheat menu.",
"Press 'INSERT' key to open/close cheat menu.", GUIColor());
GUIColor());
AddSideString("Use mouse to navigate in menu.", GUIColor()); AddSideString("Use mouse to navigate in menu.", GUIColor());
#endif #endif
if (!g_IEngine->IsInGame() if (!g_IEngine->IsInGame()

3
src/visual/menu/GuiInterface.cpp Executable file → Normal file
View File

@ -98,7 +98,8 @@ static void initPlayerlist()
}); });
controller->setOpenSteamCallback([](unsigned steam) { controller->setOpenSteamCallback([](unsigned steam) {
CSteamID id{}; CSteamID id{};
id.Set(steam, EUniverse::k_EUniversePublic, EAccountType::k_EAccountTypeIndividual); id.Set(steam, EUniverse::k_EUniversePublic,
EAccountType::k_EAccountTypeIndividual);
g_ISteamFriends->ActivateGameOverlayToUser("steamid", id); g_ISteamFriends->ActivateGameOverlayToUser("steamid", id);
}); });
} }