Fix alot of shit and add cat_nullcore_mode for emoji esp and fidget spinner corsshair
This commit is contained in:
parent
00306b6be3
commit
abee301f7d
1061
include/classinfo/dummy.gen.hpp
Executable file → Normal file
1061
include/classinfo/dummy.gen.hpp
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
1065
include/classinfo/dynamic.gen.hpp
Executable file → Normal file
1065
include/classinfo/dynamic.gen.hpp
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@ -15,6 +15,6 @@ class CatVar;
|
|||||||
extern std::array<textures::sprite, 4> spinner_states;
|
extern std::array<textures::sprite, 4> spinner_states;
|
||||||
|
|
||||||
extern CatVar enable_spinner;
|
extern CatVar enable_spinner;
|
||||||
|
extern CatVar v9mode;
|
||||||
void InitSpinner();
|
void InitSpinner();
|
||||||
void DrawSpinner();
|
void DrawSpinner();
|
||||||
|
@ -16,10 +16,10 @@ public:
|
|||||||
static CTFPartyClient *GTFPartyClient();
|
static CTFPartyClient *GTFPartyClient();
|
||||||
|
|
||||||
static int SendPartyChat(CTFPartyClient *client, const char *message);
|
static int SendPartyChat(CTFPartyClient *client, const char *message);
|
||||||
static int LoadSavedCasualCriteria(CTFPartyClient *client);
|
int LoadSavedCasualCriteria();
|
||||||
static ITFGroupMatchCriteria *MutLocalGroupCriteria(CTFPartyClient *client);
|
static ITFGroupMatchCriteria *MutLocalGroupCriteria(CTFPartyClient *client);
|
||||||
static bool BCanQueueForStandby(CTFPartyClient *this_);
|
static bool BCanQueueForStandby(CTFPartyClient *this_);
|
||||||
static void RequestQueueForMatch(CTFPartyClient *client);
|
char RequestQueueForMatch(int type);
|
||||||
static bool BInQueue(CTFPartyClient *this_);
|
static bool BInQueue(CTFPartyClient *this_);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,15 @@ class ITFGroupMatchCriteria
|
|||||||
public:
|
public:
|
||||||
enum group
|
enum group
|
||||||
{
|
{
|
||||||
CASUAL = 7
|
MvmPractice = 0,
|
||||||
|
MvmMannup = 1,
|
||||||
|
LadderMatch6v6 = 2,
|
||||||
|
LadderMatch9v9 = 3,
|
||||||
|
LadderMatch12v12 = 4,
|
||||||
|
CasualMatch6v6 = 5,
|
||||||
|
CasualMatch9v9 = 6,
|
||||||
|
CasualMatch12v12 = 7,
|
||||||
|
CompetitiveEventMatch12v12 = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
BIN
res/atlas.png
BIN
res/atlas.png
Binary file not shown.
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 367 KiB |
1101
src/classinfo/dynamic.gen.cpp
Executable file → Normal file
1101
src/classinfo/dynamic.gen.cpp
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
10
src/fidgetspinner.cpp
Executable file → Normal file
10
src/fidgetspinner.cpp
Executable file → Normal file
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
CatVar enable_spinner(CV_SWITCH, "fidgetspinner", "0", "Fidget Spinner",
|
CatVar enable_spinner(CV_SWITCH, "fidgetspinner", "0", "Fidget Spinner",
|
||||||
"Part of Cathook Autism Awareness program");
|
"Part of Cathook Autism Awareness program");
|
||||||
|
CatVar v9mode(CV_SWITCH, "nullcore_mode", "0", "Nullcore mode", "Part of Cathook Autism Awareness program");
|
||||||
|
|
||||||
float spinning_speed = 0.0f;
|
float spinning_speed = 0.0f;
|
||||||
float angle = 0;
|
float angle = 0;
|
||||||
@ -90,11 +91,12 @@ void DrawSpinner()
|
|||||||
|
|
||||||
const glez_rgba_t color = glez_rgba(255, 255, 255, 255);
|
const glez_rgba_t color = glez_rgba(255, 255, 255, 255);
|
||||||
|
|
||||||
|
static glez_texture_t tex =
|
||||||
static glez_texture_t tex = glez_texture_load_png_rgba("/opt/cathook/data/res/atlas.png");
|
glez_texture_load_png_rgba("/opt/cathook/data/res/atlas.png");
|
||||||
while (!tex)
|
while (!tex)
|
||||||
tex = glez_texture_load_png_rgba("/opt/cathook/data/res/atlas.png");
|
tex = glez_texture_load_png_rgba("/opt/cathook/data/res/atlas.png");
|
||||||
glez_rect_textured(draw::width / 2, draw::height / 2, size, size, color, tex, 0 + 64 * state, 3 * 64, 64, 64, angle);
|
glez_rect_textured(draw::width / 2, draw::height / 2, size, size, color,
|
||||||
|
tex, 0 + 64 * state, (3 + (v9mode ? 1 : 0)) * 64, 64, 64, angle);
|
||||||
if (angle > PI * 4)
|
if (angle > PI * 4)
|
||||||
angle -= PI * 4;
|
angle -= PI * 4;
|
||||||
}
|
}
|
||||||
|
4
src/hacks/Aimbot.cpp
Executable file → Normal file
4
src/hacks/Aimbot.cpp
Executable file → Normal file
@ -790,7 +790,9 @@ const Vector &PredictEntity(CachedEntity *entity)
|
|||||||
if ((entity->m_Type == ENTITY_PLAYER))
|
if ((entity->m_Type == ENTITY_PLAYER))
|
||||||
{
|
{
|
||||||
// If using projectiles, predict a vector
|
// If using projectiles, predict a vector
|
||||||
if (projectile_mode && (g_pLocalPlayer->weapon_mode == weapon_projectile || g_pLocalPlayer->weapon_mode == weapon_throwable) )
|
if (projectile_mode &&
|
||||||
|
(g_pLocalPlayer->weapon_mode == weapon_projectile ||
|
||||||
|
g_pLocalPlayer->weapon_mode == weapon_throwable))
|
||||||
{
|
{
|
||||||
// Use prediction engine if user settings allow
|
// Use prediction engine if user settings allow
|
||||||
if (engine_projpred)
|
if (engine_projpred)
|
||||||
|
5
src/hacks/AntiAim.cpp
Executable file → Normal file
5
src/hacks/AntiAim.cpp
Executable file → Normal file
@ -462,9 +462,10 @@ void ProcessUserCmd(CUserCmd *cmd)
|
|||||||
if (trueang)
|
if (trueang)
|
||||||
angstate = !angstate;
|
angstate = !angstate;
|
||||||
if (!LOCAL_E->m_bAlivePlayer)
|
if (!LOCAL_E->m_bAlivePlayer)
|
||||||
|
angstate = true;
|
||||||
|
if (lagexploit::ExploitActive() || g_pUserCmd->buttons & IN_ATTACK ||
|
||||||
|
g_pUserCmd->buttons & IN_ATTACK2)
|
||||||
angstate = true;
|
angstate = true;
|
||||||
if (lagexploit::ExploitActive() || g_pUserCmd->buttons & IN_ATTACK || g_pUserCmd->buttons & IN_ATTACK2)
|
|
||||||
angstate = true;
|
|
||||||
*bSendPackets = angstate;
|
*bSendPackets = angstate;
|
||||||
float &p = cmd->viewangles.x;
|
float &p = cmd->viewangles.x;
|
||||||
float &y = cmd->viewangles.y;
|
float &y = cmd->viewangles.y;
|
||||||
|
@ -52,11 +52,10 @@ void UpdateSearch()
|
|||||||
if (g_IEngine->IsInGame())
|
if (g_IEngine->IsInGame())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (autoqueue_timer.test_and_set(5000))
|
if (autoqueue_timer.test_and_set(10000))
|
||||||
{
|
{
|
||||||
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
|
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
|
||||||
|
if (gc && !gc->BConnectedToMatchServer(false) && CE_BAD(LOCAL_E))
|
||||||
if (gc && !gc->BConnectedToMatchServer(false) && !gc->BHaveLiveMatch())
|
|
||||||
{
|
{
|
||||||
logging::Info("Starting queue");
|
logging::Info("Starting queue");
|
||||||
tfmm::queue_start();
|
tfmm::queue_start();
|
||||||
|
2
src/hacks/AutoSticky.cpp
Executable file → Normal file
2
src/hacks/AutoSticky.cpp
Executable file → Normal file
@ -114,7 +114,6 @@ void CreateMove()
|
|||||||
bombs.clear();
|
bombs.clear();
|
||||||
targets.clear();
|
targets.clear();
|
||||||
|
|
||||||
|
|
||||||
// Cycle through the ents and search for valid ents
|
// Cycle through the ents and search for valid ents
|
||||||
for (int i = 0; i < HIGHEST_ENTITY; i++)
|
for (int i = 0; i < HIGHEST_ENTITY; i++)
|
||||||
{
|
{
|
||||||
@ -175,7 +174,6 @@ void CreateMove()
|
|||||||
// Use silent
|
// Use silent
|
||||||
g_pLocalPlayer->bUseSilentAngles = true;
|
g_pLocalPlayer->bUseSilentAngles = true;
|
||||||
|
|
||||||
|
|
||||||
// Detonate
|
// Detonate
|
||||||
g_pUserCmd->buttons |= IN_ATTACK2;
|
g_pUserCmd->buttons |= IN_ATTACK2;
|
||||||
|
|
||||||
|
@ -392,6 +392,8 @@ void _FASTCALL emoji(CachedEntity *ent)
|
|||||||
{
|
{
|
||||||
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y)
|
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y)
|
||||||
: float(emoji_esp_size);
|
: float(emoji_esp_size);
|
||||||
|
if (v9mode)
|
||||||
|
size *= 1.4;
|
||||||
if (!size || !float(emoji_min_size))
|
if (!size || !float(emoji_min_size))
|
||||||
return;
|
return;
|
||||||
if (emoji_esp_scaling && (size < float(emoji_min_size)))
|
if (emoji_esp_scaling && (size < float(emoji_min_size)))
|
||||||
@ -399,21 +401,19 @@ void _FASTCALL emoji(CachedEntity *ent)
|
|||||||
size = float(emoji_min_size);
|
size = float(emoji_min_size);
|
||||||
}
|
}
|
||||||
glez_rgba_t white = glez_rgba(255, 255, 255, 255);
|
glez_rgba_t white = glez_rgba(255, 255, 255, 255);
|
||||||
if (!textur)
|
while (!textur)
|
||||||
textur = glez_texture_load_png_rgba(
|
textur = glez_texture_load_png_rgba(
|
||||||
"/opt/cathook/data/res/atlas.png");
|
"/opt/cathook/data/res/atlas.png");
|
||||||
player_info_s info;
|
player_info_s info;
|
||||||
unsigned int steamID;
|
unsigned int steamID;
|
||||||
unsigned int steamidarray[32]{};
|
unsigned int steamidarray[32]{};
|
||||||
bool hascall = false;
|
bool hascall = false;
|
||||||
steamidarray[0] = 263966176;
|
steamidarray[0] = 479487126;
|
||||||
steamidarray[1] = 479487126;
|
steamidarray[1] = 263966176;
|
||||||
steamidarray[2] = 840899897;
|
steamidarray[2] = 840255344;
|
||||||
steamidarray[3] = 147831332;
|
steamidarray[3] = 147831332;
|
||||||
if (g_IEngine->GetPlayerInfo(ent->m_IDX, &info))
|
if (g_IEngine->GetPlayerInfo(ent->m_IDX, &info))
|
||||||
{
|
|
||||||
steamID = info.friendsID;
|
steamID = info.friendsID;
|
||||||
}
|
|
||||||
if (!idspecific)
|
if (!idspecific)
|
||||||
idspecific = glez_texture_load_png_rgba(
|
idspecific = glez_texture_load_png_rgba(
|
||||||
"/opt/cathook/data/res/idspec.png");
|
"/opt/cathook/data/res/idspec.png");
|
||||||
@ -423,59 +423,27 @@ void _FASTCALL emoji(CachedEntity *ent)
|
|||||||
glez_rect_textured(
|
glez_rect_textured(
|
||||||
head_scr.x - size / 2, head_scr.y - size / 2, size,
|
head_scr.x - size / 2, head_scr.y - size / 2, size,
|
||||||
size, white, idspecific, 2 * 64, 1 * 64, 64, 64, 0);
|
size, white, idspecific, 2 * 64, 1 * 64, 64, 64, 0);
|
||||||
for (auto i : steamidarray)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
if (steamID == i)
|
if (steamID == steamidarray[i])
|
||||||
{
|
{
|
||||||
if (!idspecific)
|
while (!idspecific)
|
||||||
{
|
|
||||||
idspecific = glez_texture_load_png_rgba(
|
idspecific = glez_texture_load_png_rgba(
|
||||||
"/opt/cathook/data/res/idspec.png");
|
"/opt/cathook/data/res/idspec.png");
|
||||||
}
|
|
||||||
if (idspecific)
|
if (idspecific)
|
||||||
{
|
glez_rect_textured(head_scr.x - size / 2,
|
||||||
if (i == steamidarray[0])
|
head_scr.y - size / 2,
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
size, size, white,
|
||||||
head_scr.y - size / 2,
|
idspecific, i * 64,
|
||||||
size, size, white,
|
1 * 64, 64, 64, 0);
|
||||||
idspecific, 1 * 64,
|
|
||||||
1 * 64, 64, 64, 0);
|
|
||||||
else if (i == steamidarray[1])
|
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
|
||||||
head_scr.y - size / 2,
|
|
||||||
size, size, white,
|
|
||||||
idspecific, 0, 1 * 64,
|
|
||||||
64, 64, 0);
|
|
||||||
|
|
||||||
else if (i == steamidarray[2])
|
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
|
||||||
head_scr.y - size / 2,
|
|
||||||
size, size, white,
|
|
||||||
idspecific, 2 * 64,
|
|
||||||
1 * 64, 64, 64, 0);
|
|
||||||
else if (i == steamidarray[3])
|
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
|
||||||
head_scr.y - size / 2,
|
|
||||||
size, size, white,
|
|
||||||
idspecific, 3 * 64,
|
|
||||||
1 * 64, 64, 64, 0);
|
|
||||||
}
|
|
||||||
hascall = true;
|
hascall = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (textur && !hascall)
|
if (textur && !hascall)
|
||||||
{
|
draw_api::draw_rect_textured(head_scr.x - size / 2,
|
||||||
if (emoji_esp == 1)
|
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
|
||||||
head_scr.y - size / 2, size,
|
head_scr.y - size / 2, size,
|
||||||
size, white, textur, 4 * 64,
|
size, colors::white, {textur}, (3 + (v9mode ? 3 : (int)emoji_esp)) * 64,
|
||||||
3 * 64, 64, 64, 0);
|
3 * 64, 64, 64, 0);
|
||||||
else if (emoji_esp == 2)
|
|
||||||
glez_rect_textured(head_scr.x - size / 2,
|
|
||||||
head_scr.y - size / 2, size,
|
|
||||||
size, white, textur, 5 * 64,
|
|
||||||
3 * 64, 64, 64, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
29
src/hacks/LagExploit.cpp
Executable file → Normal file
29
src/hacks/LagExploit.cpp
Executable file → Normal file
@ -34,6 +34,12 @@ CatVar cart(CV_SWITCH, "se_cart", "0", "Farm cart points",
|
|||||||
CatVar instant_weapon_switch(CV_SWITCH, "se_switch", "0",
|
CatVar instant_weapon_switch(CV_SWITCH, "se_switch", "0",
|
||||||
"Instant weapon switch", "");
|
"Instant weapon switch", "");
|
||||||
CatVar key(CV_KEY, "se_key", "0", "Sequence exploit key");
|
CatVar key(CV_KEY, "se_key", "0", "Sequence exploit key");
|
||||||
|
CatVar weaponswitch(CV_KEY, "se_switch_key", "0",
|
||||||
|
"Switch spam key (for gru) key");
|
||||||
|
CatVar delay1(CV_INT, "se_switch_delay1", "0",
|
||||||
|
"Delay before switching to melee");
|
||||||
|
CatVar delay2(CV_INT, "se_switch_delay2", "0",
|
||||||
|
"Delay before switching to Primary");
|
||||||
CatVar master_switch(CV_SWITCH, "se_master", "1", "Enable sequence exploit",
|
CatVar master_switch(CV_SWITCH, "se_master", "1", "Enable sequence exploit",
|
||||||
"Master switch for the sequence exploit\nDisabling this "
|
"Master switch for the sequence exploit\nDisabling this "
|
||||||
"disables everything else that uses it");
|
"disables everything else that uses it");
|
||||||
@ -66,7 +72,7 @@ bool ExploitActive()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (active)
|
if (active)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +84,7 @@ float servertime, nextattack;
|
|||||||
static int lastwep = 0;
|
static int lastwep = 0;
|
||||||
void CreateMove()
|
void CreateMove()
|
||||||
{
|
{
|
||||||
active = false;
|
active = false;
|
||||||
if (CE_BAD(LOCAL_E))
|
if (CE_BAD(LOCAL_E))
|
||||||
return;
|
return;
|
||||||
if (!LOCAL_E->m_bAlivePlayer)
|
if (!LOCAL_E->m_bAlivePlayer)
|
||||||
@ -243,6 +249,22 @@ void CreateMove()
|
|||||||
}
|
}
|
||||||
if (!master_switch)
|
if (!master_switch)
|
||||||
return;
|
return;
|
||||||
|
if (weaponswitch.KeyDown())
|
||||||
|
{
|
||||||
|
static int aa = 0, bb = 0;
|
||||||
|
if (aa > (int) delay1)
|
||||||
|
{
|
||||||
|
g_IEngine->ExecuteClientCmd("slot1");
|
||||||
|
aa = 0;
|
||||||
|
}
|
||||||
|
if (bb > (int) delay1 + (int) delay2)
|
||||||
|
{
|
||||||
|
g_IEngine->ExecuteClientCmd("slot3");
|
||||||
|
bb = 0;
|
||||||
|
}
|
||||||
|
aa++;
|
||||||
|
bb++;
|
||||||
|
}
|
||||||
static bool bWasHolding = false;
|
static bool bWasHolding = false;
|
||||||
bool bIsHolding = ((g_pUserCmd->buttons & IN_ATTACK) ||
|
bool bIsHolding = ((g_pUserCmd->buttons & IN_ATTACK) ||
|
||||||
(g_pUserCmd->buttons & IN_ATTACK2));
|
(g_pUserCmd->buttons & IN_ATTACK2));
|
||||||
@ -411,7 +433,8 @@ void CreateMove()
|
|||||||
servertime =
|
servertime =
|
||||||
(float) (CE_INT(g_pLocalPlayer->entity, netvar.nTickBase)) *
|
(float) (CE_INT(g_pLocalPlayer->entity, netvar.nTickBase)) *
|
||||||
g_GlobalVars->interval_per_tick;
|
g_GlobalVars->interval_per_tick;
|
||||||
if (!nextattack || !i || g_pLocalPlayer->weapon()->m_iClassID != lastwep)
|
if (!nextattack || !i ||
|
||||||
|
g_pLocalPlayer->weapon()->m_iClassID != lastwep)
|
||||||
nextattack =
|
nextattack =
|
||||||
CE_FLOAT(g_pLocalPlayer->weapon(), netvar.flNextPrimaryAttack);
|
CE_FLOAT(g_pLocalPlayer->weapon(), netvar.flNextPrimaryAttack);
|
||||||
if (servertime - nextattack > 30.0f)
|
if (servertime - nextattack > 30.0f)
|
||||||
|
3
src/helpers.cpp
Executable file → Normal file
3
src/helpers.cpp
Executable file → Normal file
@ -682,7 +682,8 @@ bool GetProjectileData(CachedEntity *weapon, float &speed, float &gravity)
|
|||||||
rspeed = re::C_TFWeaponBaseGun::GetProjectileSpeed(
|
rspeed = re::C_TFWeaponBaseGun::GetProjectileSpeed(
|
||||||
RAW_ENT(g_pLocalPlayer->weapon()));
|
RAW_ENT(g_pLocalPlayer->weapon()));
|
||||||
// TODO Wrong grenade launcher gravity
|
// TODO Wrong grenade launcher gravity
|
||||||
rgrav = re::C_TFWeaponBaseGun::GetProjectileGravity(RAW_ENT(g_pLocalPlayer->weapon()));
|
rgrav = re::C_TFWeaponBaseGun::GetProjectileGravity(
|
||||||
|
RAW_ENT(g_pLocalPlayer->weapon()));
|
||||||
}
|
}
|
||||||
else IF_GAME(IsTF2C())
|
else IF_GAME(IsTF2C())
|
||||||
{
|
{
|
||||||
|
9
src/menu/ncc/Menu.cpp
Executable file → Normal file
9
src/menu/ncc/Menu.cpp
Executable file → Normal file
@ -79,10 +79,11 @@ void RefreshFonts()
|
|||||||
font_title = g_ISurface->CreateFont();
|
font_title = g_ISurface->CreateFont();
|
||||||
font_item = g_ISurface->CreateFont();
|
font_item = g_ISurface->CreateFont();
|
||||||
g_ISurface->SetFontGlyphSet(
|
g_ISurface->SetFontGlyphSet(
|
||||||
font_title, fonts::fonts
|
font_title,
|
||||||
.at(_clamp(0, (int) (fonts::fonts.size() - 1),
|
fonts::fonts
|
||||||
(int) font_title_family))
|
.at(_clamp(0, (int) (fonts::fonts.size() - 1),
|
||||||
.c_str(),
|
(int) font_title_family))
|
||||||
|
.c_str(),
|
||||||
psize_font_title * (float) scale, 0, 0, 0, 0x0);
|
psize_font_title * (float) scale, 0, 0, 0, 0x0);
|
||||||
g_ISurface->SetFontGlyphSet(
|
g_ISurface->SetFontGlyphSet(
|
||||||
font_item,
|
font_item,
|
||||||
|
@ -14,8 +14,7 @@ CTFGCClientSystem *CTFGCClientSystem::GTFGCClientSystem()
|
|||||||
{
|
{
|
||||||
typedef CTFGCClientSystem *(*GTFGCClientSystem_t)();
|
typedef CTFGCClientSystem *(*GTFGCClientSystem_t)();
|
||||||
static uintptr_t addr1 = gSignatures.GetClientSignature(
|
static uintptr_t addr1 = gSignatures.GetClientSignature(
|
||||||
"E8 ? ? ? ? 84 C0 0F 85 7B 02 00 00 E8 ? ? ? ? BE 01 00 00 00 89 04 24 "
|
"E8 ? ? ? ? 84 C0 0F 85 ? ? ? ? E8 ? ? ? ? 89 04 24 E8 ? ? ? ? 85 C0");
|
||||||
"E8 ? ? ? ? 85 C0 0F 84 E5 02 00 00");
|
|
||||||
static GTFGCClientSystem_t GTFGCClientSystem_fn =
|
static GTFGCClientSystem_t GTFGCClientSystem_fn =
|
||||||
GTFGCClientSystem_t(e8call((void *) (addr1 + 14)));
|
GTFGCClientSystem_t(e8call((void *) (addr1 + 14)));
|
||||||
|
|
||||||
@ -40,8 +39,7 @@ bool CTFGCClientSystem::BConnectedToMatchServer(bool flag)
|
|||||||
{
|
{
|
||||||
typedef bool (*BConnectedToMatchServer_t)(CTFGCClientSystem *, bool);
|
typedef bool (*BConnectedToMatchServer_t)(CTFGCClientSystem *, bool);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
static uintptr_t addr = gSignatures.GetClientSignature(
|
||||||
"55 89 E5 53 80 7D 0C 00 8B 55 08 75 1B 8B 82 F8 04 00 00 83 E8 01 83 "
|
"55 89 E5 53 80 7D ? ? 8B 55 ? 75 ?");
|
||||||
"F8 01 0F 96 C0 8D 74 26 00 5B 5D C3");
|
|
||||||
static BConnectedToMatchServer_t BConnectedToMatchServer_fn =
|
static BConnectedToMatchServer_t BConnectedToMatchServer_fn =
|
||||||
BConnectedToMatchServer_t(addr);
|
BConnectedToMatchServer_t(addr);
|
||||||
|
|
||||||
@ -50,12 +48,13 @@ bool CTFGCClientSystem::BConnectedToMatchServer(bool flag)
|
|||||||
|
|
||||||
bool CTFGCClientSystem::BHaveLiveMatch()
|
bool CTFGCClientSystem::BHaveLiveMatch()
|
||||||
{
|
{
|
||||||
typedef bool (*BHaveLiveMatch_t)(CTFGCClientSystem *);
|
typedef int (*BHaveLiveMatch_t)(CTFGCClientSystem *);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
static uintptr_t addr = gSignatures.GetClientSignature("55 31 C0 89 E5 53 8B 4D ? 0F B6 91 ? ? ? ?");
|
||||||
"55 31 C0 89 E5 53 8B 4D 08 0F B6 91 0F 05 00 00 89 D3 81 E3 F0 00 00 "
|
|
||||||
"00 74 36 80 FA AF");
|
|
||||||
static BHaveLiveMatch_t BHaveLiveMatch_fn = BHaveLiveMatch_t(addr);
|
static BHaveLiveMatch_t BHaveLiveMatch_fn = BHaveLiveMatch_t(addr);
|
||||||
|
if (BHaveLiveMatch_fn == nullptr)
|
||||||
|
{
|
||||||
|
logging::Info("calling NULL!");
|
||||||
|
}
|
||||||
return BHaveLiveMatch_fn(this);
|
return BHaveLiveMatch_fn(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
src/reclasses/CTFPartyClient.cpp
Executable file → Normal file
40
src/reclasses/CTFPartyClient.cpp
Executable file → Normal file
@ -11,12 +11,10 @@
|
|||||||
re::CTFPartyClient *re::CTFPartyClient::GTFPartyClient()
|
re::CTFPartyClient *re::CTFPartyClient::GTFPartyClient()
|
||||||
{
|
{
|
||||||
typedef re::CTFPartyClient *(*GTFPartyClient_t)(void);
|
typedef re::CTFPartyClient *(*GTFPartyClient_t)(void);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
uintptr_t addr =
|
||||||
"83 04 02 00 00 00 00 00 00 ? 83 08 02 00 00 "
|
gSignatures.GetClientSignature("55 A1 ? ? ? ? 89 E5 5D C3 8D B6 00 00 00 00 A1 ? ? ? ? 85 C0");
|
||||||
"01 E8 ? ? ? ? 89 04 24 E8 ? ? ? ?") +
|
GTFPartyClient_t GTFPartyClient_fn =
|
||||||
17;
|
GTFPartyClient_t(addr);
|
||||||
static GTFPartyClient_t GTFPartyClient_fn =
|
|
||||||
GTFPartyClient_t(e8call((void *) addr));
|
|
||||||
|
|
||||||
return GTFPartyClient_fn();
|
return GTFPartyClient_fn();
|
||||||
}
|
}
|
||||||
@ -50,35 +48,31 @@ re::CTFPartyClient::MutLocalGroupCriteria(re::CTFPartyClient *client)
|
|||||||
typedef re::ITFGroupMatchCriteria *(*MutLocalGroupCriteria_t)(
|
typedef re::ITFGroupMatchCriteria *(*MutLocalGroupCriteria_t)(
|
||||||
re::CTFPartyClient *);
|
re::CTFPartyClient *);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
static uintptr_t addr = gSignatures.GetClientSignature(
|
||||||
"55 89 E5 8B 45 08 8B 50 38 C6 80 BC 01 00 00 01 85 D2 74 06 80 78 44 "
|
"55 89 E5 8B 45 ? 8B 50 ? C6 80 ? ? ? ? ?");
|
||||||
"00 74 07");
|
|
||||||
static MutLocalGroupCriteria_t MutLocalGroupCriteria_fn =
|
static MutLocalGroupCriteria_t MutLocalGroupCriteria_fn =
|
||||||
MutLocalGroupCriteria_t(addr);
|
MutLocalGroupCriteria_t(addr);
|
||||||
|
|
||||||
return MutLocalGroupCriteria_fn(client);
|
return MutLocalGroupCriteria_fn(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
int re::CTFPartyClient::LoadSavedCasualCriteria(re::CTFPartyClient *client)
|
int re::CTFPartyClient::LoadSavedCasualCriteria()
|
||||||
{
|
{
|
||||||
typedef int (*LoadSavedCasualCriteria_t)(re::CTFPartyClient *);
|
typedef int (*LoadSavedCasualCriteria_t)(re::CTFPartyClient *);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
uintptr_t addr = gSignatures.GetClientSignature(
|
||||||
"83 04 02 00 00 00 00 00 00 ? 83 08 02 00 00 "
|
"55 89 E5 83 EC ? 8B 45 ? 8B 50 ? C6 80 ? ? ? ? ?");
|
||||||
"01 E8 ? ? ? ? 89 04 24 E8 ? ? ? ?") +
|
LoadSavedCasualCriteria_t LoadSavedCasualCriteria_fn =
|
||||||
25;
|
LoadSavedCasualCriteria_t(addr);
|
||||||
static LoadSavedCasualCriteria_t LoadSavedCasualCriteria_fn =
|
|
||||||
LoadSavedCasualCriteria_t(e8call((void *) addr));
|
|
||||||
|
|
||||||
return LoadSavedCasualCriteria_fn(client);
|
return LoadSavedCasualCriteria_fn(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void re::CTFPartyClient::RequestQueueForMatch(re::CTFPartyClient *client)
|
char re::CTFPartyClient::RequestQueueForMatch(int type)
|
||||||
{
|
{
|
||||||
typedef void (*RequestQueueForMatch_t)(re::CTFPartyClient *);
|
typedef char (*RequestQueueForMatch_t)(re::CTFPartyClient *, int);
|
||||||
static uintptr_t addr = gSignatures.GetClientSignature(
|
uintptr_t addr = gSignatures.GetClientSignature(
|
||||||
"55 89 E5 57 56 53 81 EC 8C 00 00 00 8B 7D 08 80 BF C1 01 00 00 00 0F "
|
"55 89 E5 57 56 53 81 EC ? ? ? ? 8B 75 ? 89 F0");
|
||||||
"85 4F 04 00 00 80 7F 45 00 0F 85 45 04 00 00");
|
RequestQueueForMatch_t RequestQueueForMatch_fn =
|
||||||
static RequestQueueForMatch_t RequestQueueForMatch_fn =
|
|
||||||
RequestQueueForMatch_t(addr);
|
RequestQueueForMatch_t(addr);
|
||||||
|
|
||||||
return RequestQueueForMatch_fn(client);
|
return RequestQueueForMatch_fn(this, type);
|
||||||
}
|
}
|
||||||
|
12
src/tfmm.cpp
12
src/tfmm.cpp
@ -26,16 +26,14 @@ CatCommand get_state("mm_state", "Get party state", []() {
|
|||||||
namespace tfmm
|
namespace tfmm
|
||||||
{
|
{
|
||||||
|
|
||||||
void queue_start()
|
void queue_start() {
|
||||||
{
|
|
||||||
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
re::CTFPartyClient *client = re::CTFPartyClient::GTFPartyClient();
|
||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
re::ITFGroupMatchCriteria::SetMatchGroup(
|
logging::Info("test1");
|
||||||
re::CTFPartyClient::MutLocalGroupCriteria(client),
|
client->LoadSavedCasualCriteria();
|
||||||
re::ITFGroupMatchCriteria::group::CASUAL);
|
logging::Info("test2");
|
||||||
re::CTFPartyClient::LoadSavedCasualCriteria(client);
|
client->RequestQueueForMatch(re::ITFGroupMatchCriteria::CasualMatch12v12);
|
||||||
re::CTFPartyClient::RequestQueueForMatch(client);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -40,6 +40,7 @@ CatVar info_text(CV_SWITCH, "info", "1", "Show info",
|
|||||||
"Show cathook version in top left corner");
|
"Show cathook version in top left corner");
|
||||||
CatVar info_text_min(CV_SWITCH, "info_min", "0", "Show minimal info",
|
CatVar info_text_min(CV_SWITCH, "info_min", "0", "Show minimal info",
|
||||||
"Only show cathook title in top left corner");
|
"Only show cathook title in top left corner");
|
||||||
|
CatVar enable_logo(CV_SWITCH, "nullcore_mode_logo", "1", "Enable Nullcore watermark", "");
|
||||||
|
|
||||||
void DrawCheatVisuals()
|
void DrawCheatVisuals()
|
||||||
{
|
{
|
||||||
@ -50,7 +51,6 @@ void DrawCheatVisuals()
|
|||||||
PROF_SECTION(DRAW_misc);
|
PROF_SECTION(DRAW_misc);
|
||||||
hacks::shared::misc::DrawText();
|
hacks::shared::misc::DrawText();
|
||||||
}
|
}
|
||||||
if (info_text)
|
|
||||||
{
|
{
|
||||||
PROF_SECTION(DRAW_info);
|
PROF_SECTION(DRAW_info);
|
||||||
std::string name_s, reason_s;
|
std::string name_s, reason_s;
|
||||||
|
Reference in New Issue
Block a user