some small changes + MASSIVELY reduced fps impact from ESP PT
This commit is contained in:
parent
61189c1bce
commit
f242881735
@ -36,6 +36,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "aftercheaders.h"
|
#include "aftercheaders.h"
|
||||||
|
#include "profiler.h"
|
||||||
#include "offsets.hpp"
|
#include "offsets.hpp"
|
||||||
#include "drawing.h"
|
#include "drawing.h"
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
@ -23,14 +23,14 @@ bool CritKeyDown() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool AllowAttacking() {
|
bool AllowAttacking() {
|
||||||
if (!(CritKeyDown() || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee)) && !hacks::shared::misc::crit_suppress) return true;
|
if (!(CritKeyDown() || ((GetWeaponMode() == weapon_melee) && hacks::shared::misc::crit_melee)) && !hacks::shared::misc::crit_suppress) return true;
|
||||||
bool crit = IsAttackACrit(g_pUserCmd);
|
bool crit = IsAttackACrit(g_pUserCmd);
|
||||||
LoadSavedState();
|
LoadSavedState();
|
||||||
if (hacks::shared::misc::crit_suppress && !(CritKeyDown() || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee))) {
|
if (hacks::shared::misc::crit_suppress && !(CritKeyDown() || ((GetWeaponMode() == weapon_melee) && hacks::shared::misc::crit_melee))) {
|
||||||
if (crit && !IsPlayerCritBoosted(LOCAL_E)) {
|
if (crit && !IsPlayerCritBoosted(LOCAL_E)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if ((CritKeyDown() || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee)) && RandomCrits() && WeaponCanCrit() && (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFKnife)) {
|
} else if ((CritKeyDown() || ((GetWeaponMode() == weapon_melee) && hacks::shared::misc::crit_melee)) && RandomCrits() && WeaponCanCrit() && (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFKnife)) {
|
||||||
if (!crit) return false;
|
if (!crit) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -127,7 +127,7 @@ bool IsAttackACrit(CUserCmd* cmd) {
|
|||||||
int b = LOCAL_E->m_IDX;
|
int b = LOCAL_E->m_IDX;
|
||||||
rseed = rseed ^ (b | c);
|
rseed = rseed ^ (b | c);
|
||||||
RandomSeed(rseed);
|
RandomSeed(rseed);
|
||||||
if (GetWeaponMode(LOCAL_E) == weapon_melee) {
|
if (GetWeaponMode() == weapon_melee) {
|
||||||
*(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u) = 1000.0f;
|
*(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u) = 1000.0f;
|
||||||
}
|
}
|
||||||
state.Save(weapon);
|
state.Save(weapon);
|
||||||
|
@ -176,7 +176,7 @@ void CreateMove() {
|
|||||||
if (CE_BAD(ent)) continue;
|
if (CE_BAD(ent)) continue;
|
||||||
tg = TargetState(ent);
|
tg = TargetState(ent);
|
||||||
if (tg == EAimbotTargetState::GOOD) {
|
if (tg == EAimbotTargetState::GOOD) {
|
||||||
if (GetWeaponMode(g_pLocalPlayer->entity) == weaponmode::weapon_melee || (int)priority_mode == 2) {
|
if (GetWeaponMode() == weaponmode::weapon_melee || (int)priority_mode == 2) {
|
||||||
scr = 4096.0f - calculated_data_array[i].aim_position.DistTo(g_pLocalPlayer->v_Eye);
|
scr = 4096.0f - calculated_data_array[i].aim_position.DistTo(g_pLocalPlayer->v_Eye);
|
||||||
if (scr > target_highest_score) {
|
if (scr > target_highest_score) {
|
||||||
target_highest_score = scr;
|
target_highest_score = scr;
|
||||||
@ -199,11 +199,7 @@ void CreateMove() {
|
|||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case 3: {
|
case 3: {
|
||||||
if (ent->m_Type == ENTITY_BUILDING) {
|
scr = 450.0f - ent->m_iHealth;
|
||||||
scr = 450.0f - CE_INT(ent, netvar.iBuildingHealth);
|
|
||||||
} else {
|
|
||||||
scr = 450.0f - CE_INT(ent, netvar.iHealth);
|
|
||||||
}
|
|
||||||
if (scr > target_highest_score) {
|
if (scr > target_highest_score) {
|
||||||
target_highest_score = scr;
|
target_highest_score = scr;
|
||||||
target_highest = ent;
|
target_highest = ent;
|
||||||
@ -331,7 +327,7 @@ EAimbotTargetState TargetState(CachedEntity* entity) {
|
|||||||
if (ignore_taunting && HasCondition<TFCond_Taunting>(entity)) return EAimbotTargetState::TAUNTING;
|
if (ignore_taunting && HasCondition<TFCond_Taunting>(entity)) return EAimbotTargetState::TAUNTING;
|
||||||
if (IsPlayerInvulnerable(entity)) return EAimbotTargetState::INVULNERABLE;
|
if (IsPlayerInvulnerable(entity)) return EAimbotTargetState::INVULNERABLE;
|
||||||
if (respect_cloak && IsPlayerInvisible(entity)) return EAimbotTargetState::INVISIBLE;
|
if (respect_cloak && IsPlayerInvisible(entity)) return EAimbotTargetState::INVISIBLE;
|
||||||
mode = GetWeaponMode(LOCAL_E);
|
mode = GetWeaponMode();
|
||||||
if (mode == weaponmode::weapon_hitscan || LOCAL_W->m_iClassID == g_pClassID->CTFCompoundBow)
|
if (mode == weaponmode::weapon_hitscan || LOCAL_W->m_iClassID == g_pClassID->CTFCompoundBow)
|
||||||
if (respect_vaccinator && HasCondition<TFCond_UberBulletResist>(entity)) return EAimbotTargetState::VACCINATED;
|
if (respect_vaccinator && HasCondition<TFCond_UberBulletResist>(entity)) return EAimbotTargetState::VACCINATED;
|
||||||
}
|
}
|
||||||
@ -489,7 +485,7 @@ bool Aim(CachedEntity* entity) {
|
|||||||
g_pLocalPlayer->bUseSilentAngles = true;
|
g_pLocalPlayer->bUseSilentAngles = true;
|
||||||
}
|
}
|
||||||
if (autoshoot) {
|
if (autoshoot) {
|
||||||
if (g_pLocalPlayer->clazz == tf_class::tf_sniper) {
|
if (TF && g_pLocalPlayer->clazz == tf_class::tf_sniper) {
|
||||||
if (g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFSniperRifle || g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFSniperRifleDecap) {
|
if (g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFSniperRifle || g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFSniperRifleDecap) {
|
||||||
if (zoomed_only && !CanHeadshot()) return true;
|
if (zoomed_only && !CanHeadshot()) return true;
|
||||||
}
|
}
|
||||||
@ -511,7 +507,7 @@ bool Aim(CachedEntity* entity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Tell reset conds to function
|
//Tell reset conds to function
|
||||||
if (instant_rezoom_enabled) {
|
if (TF && instant_rezoom_enabled) {
|
||||||
if (attack && g_pLocalPlayer->bZoomed && !instant_rezoom_shoot) {
|
if (attack && g_pLocalPlayer->bZoomed && !instant_rezoom_shoot) {
|
||||||
instant_rezoom_shoot = true;
|
instant_rezoom_shoot = true;
|
||||||
}
|
}
|
||||||
@ -571,7 +567,7 @@ bool UpdateAimkey() {
|
|||||||
|
|
||||||
|
|
||||||
float EffectiveTargetingRange() {
|
float EffectiveTargetingRange() {
|
||||||
if (GetWeaponMode(g_pLocalPlayer->weapon()) == weapon_melee) {
|
if (GetWeaponMode() == weapon_melee) {
|
||||||
return 100.0f;
|
return 100.0f;
|
||||||
}
|
}
|
||||||
return (float)max_range;
|
return (float)max_range;
|
||||||
@ -605,13 +601,13 @@ EAimbotLocalState ShouldAim() {
|
|||||||
// Miniguns should shoot and aim continiously. TODO smg
|
// Miniguns should shoot and aim continiously. TODO smg
|
||||||
if (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFMinigun) {
|
if (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFMinigun) {
|
||||||
// Melees are weird, they should aim continiously like miniguns too.
|
// Melees are weird, they should aim continiously like miniguns too.
|
||||||
if (GetWeaponMode(g_pLocalPlayer->entity) != weaponmode::weapon_melee) {
|
if (GetWeaponMode() != weaponmode::weapon_melee) {
|
||||||
// Finally, CanShoot() check.
|
// Finally, CanShoot() check.
|
||||||
if (!CanShoot()) return EAimbotLocalState::CANT_SHOOT;
|
if (!CanShoot()) return EAimbotLocalState::CANT_SHOOT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (GetWeaponMode(g_pLocalPlayer->entity)) {
|
switch (GetWeaponMode()) {
|
||||||
case weapon_hitscan:
|
case weapon_hitscan:
|
||||||
case weapon_melee:
|
case weapon_melee:
|
||||||
break;
|
break;
|
||||||
@ -683,7 +679,7 @@ int BestHitbox(CachedEntity* target) {
|
|||||||
flags = CE_INT(target, netvar.iFlags);
|
flags = CE_INT(target, netvar.iFlags);
|
||||||
ground = (flags & (1 << 0));
|
ground = (flags & (1 << 0));
|
||||||
if (!ground) {
|
if (!ground) {
|
||||||
if (GetWeaponMode(g_pLocalPlayer->entity) == weaponmode::weapon_projectile) {
|
if (GetWeaponMode() == weaponmode::weapon_projectile) {
|
||||||
if (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFCompoundBow) {
|
if (g_pLocalPlayer->weapon()->m_iClassID != g_pClassID->CTFCompoundBow) {
|
||||||
preferred = hitbox_t::spine_3;
|
preferred = hitbox_t::spine_3;
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ bool ShouldAA(CUserCmd* cmd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((cmd->buttons & IN_ATTACK2) && g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFLunchBox) return false;
|
if ((cmd->buttons & IN_ATTACK2) && g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFLunchBox) return false;
|
||||||
switch (GetWeaponMode(g_pLocalPlayer->entity)) {
|
switch (GetWeaponMode()) {
|
||||||
case weapon_projectile:
|
case weapon_projectile:
|
||||||
if (g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFCompoundBow) {
|
if (g_pLocalPlayer->weapon()->m_iClassID == g_pClassID->CTFCompoundBow) {
|
||||||
if (!(cmd->buttons & IN_ATTACK)) {
|
if (!(cmd->buttons & IN_ATTACK)) {
|
||||||
|
@ -280,7 +280,7 @@ void CreateMove() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!enabled && !force_healing_target) return;
|
if (!enabled && !force_healing_target) return;
|
||||||
if (GetWeaponMode(g_pLocalPlayer->entity) != weapon_medigun) return;
|
if (GetWeaponMode() != weapon_medigun) return;
|
||||||
if (force_healing_target) {
|
if (force_healing_target) {
|
||||||
CachedEntity* target = ENTITY(force_healing_target);
|
CachedEntity* target = ENTITY(force_healing_target);
|
||||||
if (CE_GOOD(target)) {
|
if (CE_GOOD(target)) {
|
||||||
|
@ -53,6 +53,7 @@ void ResetEntityStrings() {
|
|||||||
for (auto& i : data) {
|
for (auto& i : data) {
|
||||||
i.string_count = 0;
|
i.string_count = 0;
|
||||||
i.color = 0;
|
i.color = 0;
|
||||||
|
i.needs_paint = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,14 +66,18 @@ void AddEntityString(CachedEntity* entity, const std::string& string, int color)
|
|||||||
entity_data.strings[entity_data.string_count].data = string;
|
entity_data.strings[entity_data.string_count].data = string;
|
||||||
entity_data.strings[entity_data.string_count].color = color;
|
entity_data.strings[entity_data.string_count].color = color;
|
||||||
entity_data.string_count++;
|
entity_data.string_count++;
|
||||||
|
entity_data.needs_paint = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<int> entities_need_repaint {};
|
||||||
|
|
||||||
void CreateMove() {
|
void CreateMove() {
|
||||||
int limit;
|
int limit;
|
||||||
static int max_clients = g_IEngine->GetMaxClients();
|
static int max_clients = g_IEngine->GetMaxClients();
|
||||||
CachedEntity* ent;
|
CachedEntity* ent;
|
||||||
|
|
||||||
ResetEntityStrings();
|
ResetEntityStrings();
|
||||||
|
entities_need_repaint.clear();
|
||||||
limit = HIGHEST_ENTITY;
|
limit = HIGHEST_ENTITY;
|
||||||
if (!buildings && !proj_esp && !item_esp) limit = min(max_clients, HIGHEST_ENTITY);
|
if (!buildings && !proj_esp && !item_esp) limit = min(max_clients, HIGHEST_ENTITY);
|
||||||
for (int i = 0; i < limit; i++) {
|
for (int i = 0; i < limit; i++) {
|
||||||
@ -84,15 +89,12 @@ void CreateMove() {
|
|||||||
AddEntityString(ent, format((int)(ENTITY(i)->m_flDistance / 64 * 1.22f), 'm'));
|
AddEntityString(ent, format((int)(ENTITY(i)->m_flDistance / 64 * 1.22f), 'm'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (data[ent->m_IDX].needs_paint) entities_need_repaint.push_back(ent->m_IDX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw() {
|
void Draw() {
|
||||||
int limit;
|
for (auto& i : entities_need_repaint) {
|
||||||
static int max_clients = g_IEngine->GetMaxClients();
|
|
||||||
limit = HIGHEST_ENTITY;
|
|
||||||
if (!buildings && !proj_esp && !item_esp) limit = min(max_clients, HIGHEST_ENTITY);
|
|
||||||
for (int i = 0; i < limit; i++) {
|
|
||||||
ProcessEntityPT(ENTITY(i));
|
ProcessEntityPT(ENTITY(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,6 +111,7 @@ static CatVar esp_3d_box_nodraw(CV_SWITCH, "esp_3d_box_nodraw", "0", "Invisible
|
|||||||
static CatVar esp_3d_box_healthbar(CV_SWITCH, "esp_3d_box_healthbar", "1", "Health bar", "Adds a health bar to the esp");
|
static CatVar esp_3d_box_healthbar(CV_SWITCH, "esp_3d_box_healthbar", "1", "Health bar", "Adds a health bar to the esp");
|
||||||
|
|
||||||
void Draw3DBox(CachedEntity* ent, int clr, bool healthbar, int health, int healthmax) {
|
void Draw3DBox(CachedEntity* ent, int clr, bool healthbar, int health, int healthmax) {
|
||||||
|
PROF_SECTION(PT_esp_draw3dbox);
|
||||||
Vector mins, maxs;
|
Vector mins, maxs;
|
||||||
Vector points_r[8];
|
Vector points_r[8];
|
||||||
Vector points[8];
|
Vector points[8];
|
||||||
@ -228,6 +231,7 @@ static CatVar box_nodraw(CV_SWITCH, "esp_box_nodraw", "0", "Invisible 2D Box", "
|
|||||||
static CatVar box_expand(CV_INT, "esp_box_expand", "0", "Expand 2D Box", "Expand 2D box by N units");
|
static CatVar box_expand(CV_INT, "esp_box_expand", "0", "Expand 2D Box", "Expand 2D box by N units");
|
||||||
|
|
||||||
void DrawBox(CachedEntity* ent, int clr, float widthFactor, float addHeight, bool healthbar, int health, int healthmax) {
|
void DrawBox(CachedEntity* ent, int clr, float widthFactor, float addHeight, bool healthbar, int health, int healthmax) {
|
||||||
|
PROF_SECTION(PT_esp_drawbox);
|
||||||
Vector min, max, origin, so, omin, omax, smin, smax;
|
Vector min, max, origin, so, omin, omax, smin, smax;
|
||||||
float height, width, trf;
|
float height, width, trf;
|
||||||
bool cloak;
|
bool cloak;
|
||||||
@ -304,17 +308,19 @@ void DrawBox(CachedEntity* ent, int clr, float widthFactor, float addHeight, boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProcessEntity(CachedEntity* ent) {
|
void ProcessEntity(CachedEntity* ent) {
|
||||||
static const model_t* model;
|
const model_t* model;
|
||||||
static int string_count_backup, level, pclass;
|
int string_count_backup, level, pclass;
|
||||||
static bool shown;
|
bool shown;
|
||||||
static player_info_s info;
|
player_info_s info;
|
||||||
static powerup_type power;
|
powerup_type power;
|
||||||
static CachedEntity* weapon;
|
CachedEntity* weapon;
|
||||||
static const char* weapon_name;
|
const char* weapon_name;
|
||||||
|
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
if (CE_BAD(ent)) return;
|
if (CE_BAD(ent)) return;
|
||||||
|
|
||||||
|
ESPData& espdata = data[ent->m_IDX];
|
||||||
|
|
||||||
if (entity_info) {
|
if (entity_info) {
|
||||||
AddEntityString(ent, format(RAW_ENT(ent)->GetClientClass()->m_pNetworkName, " [", ent->m_iClassID, "]"));
|
AddEntityString(ent, format(RAW_ENT(ent)->GetClientClass()->m_pNetworkName, " [", ent->m_iClassID, "]"));
|
||||||
if (entity_id) {
|
if (entity_id) {
|
||||||
@ -418,6 +424,7 @@ void ProcessEntity(CachedEntity* ent) {
|
|||||||
if (show_health) {
|
if (show_health) {
|
||||||
AddEntityString(ent, format(ent->m_iHealth, '/', ent->m_iMaxHealth, " HP"), colors::Health(ent->m_iHealth, ent->m_iMaxHealth));
|
AddEntityString(ent, format(ent->m_iHealth, '/', ent->m_iMaxHealth, " HP"), colors::Health(ent->m_iHealth, ent->m_iMaxHealth));
|
||||||
}
|
}
|
||||||
|
espdata.needs_paint = true;
|
||||||
return;
|
return;
|
||||||
} else if (ent->m_Type == ENTITY_PLAYER && ent->m_bAlivePlayer) {
|
} else if (ent->m_Type == ENTITY_PLAYER && ent->m_bAlivePlayer) {
|
||||||
if (!(local_esp && g_IInput->CAM_IsThirdPerson()) &&
|
if (!(local_esp && g_IInput->CAM_IsThirdPerson()) &&
|
||||||
@ -482,6 +489,7 @@ void ProcessEntity(CachedEntity* ent) {
|
|||||||
if (weapon_name) AddEntityString(ent, std::string(weapon_name));
|
if (weapon_name) AddEntityString(ent, std::string(weapon_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
espdata.needs_paint = true;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -490,19 +498,23 @@ void ProcessEntity(CachedEntity* ent) {
|
|||||||
static CatVar esp_3d_box(CV_SWITCH, "esp_3d_box", "0", "3D box");
|
static CatVar esp_3d_box(CV_SWITCH, "esp_3d_box", "0", "3D box");
|
||||||
static CatVar box_healthbar(CV_SWITCH, "esp_box_healthbar", "1", "Box Healthbar");
|
static CatVar box_healthbar(CV_SWITCH, "esp_box_healthbar", "1", "Box Healthbar");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to profiler, this function is the most time-consuming (and gets called up to 200K times a second)
|
||||||
|
*/
|
||||||
|
|
||||||
void ProcessEntityPT(CachedEntity* ent) {
|
void ProcessEntityPT(CachedEntity* ent) {
|
||||||
static int fg, color;
|
PROF_SECTION(PT_esp_process_entity);
|
||||||
static bool transparent, cloak, origin_is_zero;
|
|
||||||
static Vector screen, origin_screen, draw_point;
|
int fg, color;
|
||||||
|
bool transparent, cloak, origin_is_zero;
|
||||||
|
Vector screen, origin_screen, draw_point;
|
||||||
|
|
||||||
if (!enabled) return;
|
|
||||||
if (CE_BAD(ent)) return;
|
if (CE_BAD(ent)) return;
|
||||||
|
|
||||||
|
|
||||||
transparent = false;
|
transparent = false;
|
||||||
|
|
||||||
if (!(local_esp && g_IInput->CAM_IsThirdPerson()) &&
|
//if (!(local_esp && g_IInput->CAM_IsThirdPerson()) &&
|
||||||
ent->m_IDX == g_IEngine->GetLocalPlayer()) return;
|
// ent->m_IDX == g_IEngine->GetLocalPlayer()) return;
|
||||||
|
|
||||||
const ESPData& ent_data = data[ent->m_IDX];
|
const ESPData& ent_data = data[ent->m_IDX];
|
||||||
fg = ent_data.color;
|
fg = ent_data.color;
|
||||||
@ -513,15 +525,8 @@ void ProcessEntityPT(CachedEntity* ent) {
|
|||||||
switch (ent->m_Type) {
|
switch (ent->m_Type) {
|
||||||
case ENTITY_PLAYER: {
|
case ENTITY_PLAYER: {
|
||||||
cloak = IsPlayerInvisible(ent);
|
cloak = IsPlayerInvisible(ent);
|
||||||
if (legit && ent->m_iTeam != g_pLocalPlayer->team && playerlist::IsDefault(ent)) {
|
//if (!ent->m_bEnemy && !teammates && playerlist::IsDefault(ent)) break;
|
||||||
if (cloak) return;
|
//if (!ent->m_bAlivePlayer) break;
|
||||||
/*if (ent->m_lLastSeen > v_iLegitSeenTicks->GetInt()) {
|
|
||||||
return;
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ent->m_bEnemy && !teammates && playerlist::IsDefault(ent)) break;
|
|
||||||
if (!ent->m_bAlivePlayer) break;
|
|
||||||
if (vischeck && !ent->IsVisible()) transparent = true;
|
if (vischeck && !ent->IsVisible()) transparent = true;
|
||||||
if (!fg) fg = colors::EntityF(ent);
|
if (!fg) fg = colors::EntityF(ent);
|
||||||
if (transparent) fg = colors::Transparent(fg);
|
if (transparent) fg = colors::Transparent(fg);
|
||||||
@ -533,11 +538,6 @@ void ProcessEntityPT(CachedEntity* ent) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ENTITY_BUILDING: {
|
case ENTITY_BUILDING: {
|
||||||
if (legit && ent->m_iTeam != g_pLocalPlayer->team) {
|
|
||||||
/*if (ent->m_lLastSeen > v_iLegitSeenTicks->GetInt()) {
|
|
||||||
return;
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
if (CE_INT(ent, netvar.iTeamNum) == g_pLocalPlayer->team && !teammates) break;
|
if (CE_INT(ent, netvar.iTeamNum) == g_pLocalPlayer->team && !teammates) break;
|
||||||
if (!transparent && vischeck && !ent->IsVisible()) transparent = true;
|
if (!transparent && vischeck && !ent->IsVisible()) transparent = true;
|
||||||
if (!fg) fg = colors::EntityF(ent);
|
if (!fg) fg = colors::EntityF(ent);
|
||||||
@ -553,6 +553,7 @@ void ProcessEntityPT(CachedEntity* ent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ent_data.string_count) {
|
if (ent_data.string_count) {
|
||||||
|
PROF_SECTION(PT_esp_drawstrings);
|
||||||
origin_is_zero = !box_esp || ent_data.esp_origin.IsZero(1.0f);
|
origin_is_zero = !box_esp || ent_data.esp_origin.IsZero(1.0f);
|
||||||
if (vischeck && !ent->IsVisible()) transparent = true;
|
if (vischeck && !ent->IsVisible()) transparent = true;
|
||||||
draw_point = origin_is_zero ? screen : ent_data.esp_origin;
|
draw_point = origin_is_zero ? screen : ent_data.esp_origin;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#ifndef HESP_H_
|
#ifndef HESP_H_
|
||||||
#define HESP_H_
|
#define HESP_H_
|
||||||
|
|
||||||
#include "IHack.h"
|
#include "../common.h"
|
||||||
|
|
||||||
class ConVar;
|
class ConVar;
|
||||||
class CachedEntity;
|
class CachedEntity;
|
||||||
@ -67,19 +67,20 @@ public:
|
|||||||
int string_count { 0 };
|
int string_count { 0 };
|
||||||
std::array<ESPString, 16> strings {};
|
std::array<ESPString, 16> strings {};
|
||||||
Vector esp_origin { 0, 0, 0 };
|
Vector esp_origin { 0, 0, 0 };
|
||||||
|
bool needs_paint { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
extern std::array<ESPData, 2048> data;
|
extern std::array<ESPData, 2048> data;
|
||||||
void ResetEntityStrings();
|
void ResetEntityStrings();
|
||||||
void AddEntityString(CachedEntity* entity, const std::string& string, int color = 0x0);
|
void AddEntityString(CachedEntity* entity, const std::string& string, int color = 0x0) _FASTCALL;
|
||||||
void SetEntityColor(CachedEntity* entity, int color);
|
void SetEntityColor(CachedEntity* entity, int color);
|
||||||
|
|
||||||
void CreateMove();
|
void CreateMove();
|
||||||
void Draw();
|
void Draw();
|
||||||
|
|
||||||
void DrawBox(CachedEntity* ent, int clr, float widthFactor, float addHeight, bool healthbar, int health, int healthmax);
|
void DrawBox(CachedEntity* ent, int clr, float widthFactor, float addHeight, bool healthbar, int health, int healthmax) _FASTCALL;
|
||||||
void ProcessEntity(CachedEntity* ent);
|
void ProcessEntity(CachedEntity* ent) _FASTCALL;
|
||||||
void ProcessEntityPT(CachedEntity* ent);
|
void ProcessEntityPT(CachedEntity* ent) _FASTCALL;
|
||||||
|
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ trace_t trace_object;
|
|||||||
|
|
||||||
void CreateMove() {
|
void CreateMove() {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
if (GetWeaponMode(g_pLocalPlayer->entity) != weapon_hitscan) return;
|
if (GetWeaponMode() != weapon_hitscan) return;
|
||||||
if (ambassador) {
|
if (ambassador) {
|
||||||
if (IsAmbassador(g_pLocalPlayer->weapon())) {
|
if (IsAmbassador(g_pLocalPlayer->weapon())) {
|
||||||
if ((g_GlobalVars->curtime - CE_FLOAT(g_pLocalPlayer->weapon(), netvar.flLastFireTime)) <= 1.0) {
|
if ((g_GlobalVars->curtime - CE_FLOAT(g_pLocalPlayer->weapon(), netvar.flLastFireTime)) <= 1.0) {
|
||||||
|
@ -395,28 +395,6 @@ float DistToSqr(CachedEntity* entity) {
|
|||||||
return g_pLocalPlayer->v_Origin.DistToSqr(entity->m_vecOrigin);
|
return g_pLocalPlayer->v_Origin.DistToSqr(entity->m_vecOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsMeleeWeapon(CachedEntity* ent) {
|
|
||||||
|
|
||||||
if (ent->m_iClassID == g_pClassID->CTFBat ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFBat_Fish ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFBat_Giftwrap ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFBat_Wood ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFShovel ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFKatana ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFFireAxe ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFBottle ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFSword ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFFists ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFWrench ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFRobotArm ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFKnife ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFBonesaw ||
|
|
||||||
ent->m_iClassID == g_pClassID->CTFClub) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Patch(void* address, void* patch, size_t length) {
|
void Patch(void* address, void* patch, size_t length) {
|
||||||
void* page = (void*)((uintptr_t)address &~ 0xFFF);
|
void* page = (void*)((uintptr_t)address &~ 0xFFF);
|
||||||
mprotect(page, 0xFFF, PROT_WRITE | PROT_EXEC);
|
mprotect(page, 0xFFF, PROT_WRITE | PROT_EXEC);
|
||||||
@ -430,12 +408,12 @@ bool IsProjectileCrit(CachedEntity* ent) {
|
|||||||
return CE_BYTE(ent, netvar.Rocket_bCritical);
|
return CE_BYTE(ent, netvar.Rocket_bCritical);
|
||||||
}
|
}
|
||||||
|
|
||||||
weaponmode GetWeaponMode(CachedEntity* player) {
|
weaponmode GetWeaponMode() {
|
||||||
int weapon_handle, slot;
|
int weapon_handle, slot;
|
||||||
CachedEntity *weapon;
|
CachedEntity *weapon;
|
||||||
|
|
||||||
if (CE_BAD(player)) return weapon_invalid;
|
if (CE_BAD(LOCAL_E)) return weapon_invalid;
|
||||||
weapon_handle = CE_INT(player, netvar.hActiveWeapon);
|
weapon_handle = CE_INT(LOCAL_E, netvar.hActiveWeapon);
|
||||||
if (IDX_BAD((weapon_handle & 0xFFF))) {
|
if (IDX_BAD((weapon_handle & 0xFFF))) {
|
||||||
//logging::Info("IDX_BAD: %i", weapon_handle & 0xFFF);
|
//logging::Info("IDX_BAD: %i", weapon_handle & 0xFFF);
|
||||||
return weaponmode::weapon_invalid;
|
return weaponmode::weapon_invalid;
|
||||||
|
@ -73,7 +73,7 @@ powerup_type GetPowerupOnPlayer(CachedEntity* player);
|
|||||||
// It's better if it won't create a new object each time it gets called.
|
// It's better if it won't create a new object each time it gets called.
|
||||||
// So it returns a success state, and the values are stored in out reference.
|
// So it returns a success state, and the values are stored in out reference.
|
||||||
bool GetHitbox(CachedEntity* entity, int hb, Vector& out);
|
bool GetHitbox(CachedEntity* entity, int hb, Vector& out);
|
||||||
weaponmode GetWeaponMode(CachedEntity* player);
|
weaponmode GetWeaponMode();
|
||||||
|
|
||||||
void FixMovement(CUserCmd& cmd, Vector& viewangles);
|
void FixMovement(CUserCmd& cmd, Vector& viewangles);
|
||||||
void VectorAngles(Vector &forward, Vector &angles);
|
void VectorAngles(Vector &forward, Vector &angles);
|
||||||
@ -106,7 +106,6 @@ void AimAtHitbox(CachedEntity* ent, int hitbox, CUserCmd* cmd);
|
|||||||
|
|
||||||
std::string WordWrap(std::string& in, int max, unsigned long font);
|
std::string WordWrap(std::string& in, int max, unsigned long font);
|
||||||
|
|
||||||
bool IsMeleeWeapon(CachedEntity* ent);
|
|
||||||
bool IsProjectileCrit(CachedEntity* ent);
|
bool IsProjectileCrit(CachedEntity* ent);
|
||||||
|
|
||||||
QAngle VectorToQAngle(Vector in);
|
QAngle VectorToQAngle(Vector in);
|
||||||
|
@ -135,8 +135,14 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
|
|||||||
SAFE_CALL(entity_cache::Update());
|
SAFE_CALL(entity_cache::Update());
|
||||||
}
|
}
|
||||||
// PROF_END("Entity Cache updating");
|
// PROF_END("Entity Cache updating");
|
||||||
SAFE_CALL(g_pPlayerResource->Update());
|
{
|
||||||
SAFE_CALL(g_pLocalPlayer->Update());
|
PROF_SECTION(CM_PlayerResource);
|
||||||
|
SAFE_CALL(g_pPlayerResource->Update());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_LocalPlayer);
|
||||||
|
SAFE_CALL(g_pLocalPlayer->Update());
|
||||||
|
}
|
||||||
g_Settings.bInvalid = false;
|
g_Settings.bInvalid = false;
|
||||||
// Disabled because this causes EXTREME aimbot inaccuracy
|
// Disabled because this causes EXTREME aimbot inaccuracy
|
||||||
//if (!cmd->command_number) return ret;
|
//if (!cmd->command_number) return ret;
|
||||||
@ -196,39 +202,80 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
|
|||||||
ResetCritHack();
|
ResetCritHack();
|
||||||
if (TF2) SAFE_CALL(UpdateHoovyList());
|
if (TF2) SAFE_CALL(UpdateHoovyList());
|
||||||
g_pLocalPlayer->v_OrigViewangles = cmd->viewangles;
|
g_pLocalPlayer->v_OrigViewangles = cmd->viewangles;
|
||||||
// PROF_BEGIN();
|
{
|
||||||
//RunEnginePrediction(g_pLocalPlayer->entity, cmd);
|
PROF_SECTION(CM_esp);
|
||||||
SAFE_CALL(hacks::shared::esp::CreateMove());
|
SAFE_CALL(hacks::shared::esp::CreateMove());
|
||||||
|
}
|
||||||
if (!g_pLocalPlayer->life_state && CE_GOOD(g_pLocalPlayer->weapon())) {
|
if (!g_pLocalPlayer->life_state && CE_GOOD(g_pLocalPlayer->weapon())) {
|
||||||
if (TF) SAFE_CALL(hacks::tf::uberspam::CreateMove());
|
if (TF) {
|
||||||
if (TF2) SAFE_CALL(hacks::tf2::antibackstab::CreateMove());
|
PROF_SECTION(CM_uberspam);
|
||||||
if (TF2) SAFE_CALL(hacks::tf2::noisemaker::CreateMove());
|
SAFE_CALL(hacks::tf::uberspam::CreateMove());
|
||||||
SAFE_CALL(hacks::shared::bunnyhop::CreateMove());
|
}
|
||||||
SAFE_CALL(hacks::shared::aimbot::CreateMove());
|
if (TF2) {
|
||||||
SAFE_CALL(hacks::shared::antiaim::ProcessUserCmd(cmd));
|
PROF_SECTION(CM_antibackstab);
|
||||||
if (TF) SAFE_CALL(hacks::tf::autosticky::CreateMove());
|
SAFE_CALL(hacks::tf2::antibackstab::CreateMove());
|
||||||
if (TF) SAFE_CALL(hacks::tf::autoreflect::CreateMove());
|
}
|
||||||
SAFE_CALL(hacks::shared::triggerbot::CreateMove());
|
if (TF2) {
|
||||||
if (TF) SAFE_CALL(hacks::tf::autoheal::CreateMove());
|
PROF_SECTION(CM_noisemaker);
|
||||||
if (TF2) SAFE_CALL(hacks::tf2::autobackstab::CreateMove());
|
SAFE_CALL(hacks::tf2::noisemaker::CreateMove());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_bunnyhop);
|
||||||
|
SAFE_CALL(hacks::shared::bunnyhop::CreateMove());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_aimbot);
|
||||||
|
SAFE_CALL(hacks::shared::aimbot::CreateMove());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_antiaim);
|
||||||
|
SAFE_CALL(hacks::shared::antiaim::ProcessUserCmd(cmd));
|
||||||
|
}
|
||||||
|
if (TF) {
|
||||||
|
PROF_SECTION(CM_autosticky);
|
||||||
|
SAFE_CALL(hacks::tf::autosticky::CreateMove());
|
||||||
|
}
|
||||||
|
if (TF) {
|
||||||
|
PROF_SECTION(CM_autoreflect);
|
||||||
|
SAFE_CALL(hacks::tf::autoreflect::CreateMove());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_triggerbot);
|
||||||
|
SAFE_CALL(hacks::shared::triggerbot::CreateMove());
|
||||||
|
}
|
||||||
|
if (TF) {
|
||||||
|
PROF_SECTION(CM_autoheal);
|
||||||
|
SAFE_CALL(hacks::tf::autoheal::CreateMove());
|
||||||
|
}
|
||||||
|
if (TF2) {
|
||||||
|
PROF_SECTION(CM_autobackstab);
|
||||||
|
SAFE_CALL(hacks::tf2::autobackstab::CreateMove());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_misc);
|
||||||
|
SAFE_CALL(hacks::shared::misc::CreateMove());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_spam);
|
||||||
|
SAFE_CALL(hacks::shared::spam::CreateMove());
|
||||||
}
|
}
|
||||||
//SAFE_CALL(CREATE_MOVE(FollowBot));
|
|
||||||
SAFE_CALL(hacks::shared::misc::CreateMove());
|
|
||||||
SAFE_CALL(hacks::shared::spam::CreateMove());
|
|
||||||
// PROF_END("Hacks processing");
|
|
||||||
if (time_replaced) g_GlobalVars->curtime = curtime_old;
|
|
||||||
}
|
}
|
||||||
/*for (IHack* i_hack : hack::hacks) {
|
if (time_replaced) g_GlobalVars->curtime = curtime_old;
|
||||||
if (!i_hack->CreateMove(thisptr, inputSample, cmd)) {
|
|
||||||
ret = false;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
g_Settings.bInvalid = false;
|
g_Settings.bInvalid = false;
|
||||||
chat_stack::OnCreateMove();
|
{
|
||||||
hacks::shared::lagexploit::CreateMove();
|
PROF_SECTION(CM_chat_stack);
|
||||||
|
chat_stack::OnCreateMove();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(CM_lagexploit);
|
||||||
|
hacks::shared::lagexploit::CreateMove();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO Auto Steam Friend
|
// TODO Auto Steam Friend
|
||||||
|
|
||||||
if (g_GlobalVars->framecount % 1000 == 0) {
|
if (g_GlobalVars->framecount % 1000 == 0) {
|
||||||
|
PROF_SECTION(CM_playerlist);
|
||||||
playerlist::DoNotKillMe();
|
playerlist::DoNotKillMe();
|
||||||
#ifdef IPC_ENABLED
|
#ifdef IPC_ENABLED
|
||||||
ipc::UpdatePlayerlist();
|
ipc::UpdatePlayerlist();
|
||||||
@ -267,6 +314,7 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
|
|||||||
}
|
}
|
||||||
#ifdef IPC_ENABLED
|
#ifdef IPC_ENABLED
|
||||||
if (CE_GOOD(g_pLocalPlayer->entity) && !g_pLocalPlayer->life_state) {
|
if (CE_GOOD(g_pLocalPlayer->entity) && !g_pLocalPlayer->life_state) {
|
||||||
|
PROF_SECTION(CM_followbot);
|
||||||
SAFE_CALL(hacks::shared::followbot::AfterCreateMove());
|
SAFE_CALL(hacks::shared::followbot::AfterCreateMove());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,7 +46,6 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
if (!segvcatch::handler_segv) segvcatch::init_fpe();
|
if (!segvcatch::handler_segv) segvcatch::init_fpe();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SEGV_BEGIN;
|
|
||||||
if (!textures_loaded) {
|
if (!textures_loaded) {
|
||||||
textures_loaded = true;
|
textures_loaded = true;
|
||||||
hacks::tf::radar::Init();
|
hacks::tf::radar::Init();
|
||||||
@ -91,7 +90,8 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
if (call_default) SAFE_CALL(original(_this, vp, fr, ar));
|
if (call_default) SAFE_CALL(original(_this, vp, fr, ar));
|
||||||
// To avoid threading problems.
|
// To avoid threading problems.
|
||||||
|
|
||||||
PROF_SECTION(PaintTraverse);
|
PROF_SECTION(PT_total);
|
||||||
|
|
||||||
if (vp == panel_top) draw_flag = true;
|
if (vp == panel_top) draw_flag = true;
|
||||||
if (!cathook) return;
|
if (!cathook) return;
|
||||||
|
|
||||||
@ -130,6 +130,7 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
draw_flag = false;
|
draw_flag = false;
|
||||||
|
|
||||||
if (!hack::command_stack().empty()) {
|
if (!hack::command_stack().empty()) {
|
||||||
|
PROF_SECTION(PT_command_stack);
|
||||||
std::lock_guard<std::mutex> guard(hack::command_stack_mutex);
|
std::lock_guard<std::mutex> guard(hack::command_stack_mutex);
|
||||||
while (!hack::command_stack().empty()) {
|
while (!hack::command_stack().empty()) {
|
||||||
logging::Info("executing %s", hack::command_stack().top().c_str());
|
logging::Info("executing %s", hack::command_stack().top().c_str());
|
||||||
@ -142,7 +143,10 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
|
|
||||||
if (clean_screenshots && g_IEngine->IsTakingScreenshot()) return;
|
if (clean_screenshots && g_IEngine->IsTakingScreenshot()) return;
|
||||||
|
|
||||||
|
PROF_SECTION(PT_active);
|
||||||
|
|
||||||
if (info_text) {
|
if (info_text) {
|
||||||
|
PROF_SECTION(PT_info_text);
|
||||||
AddSideString("cathook by nullifiedcat", colors::RainbowCurrent());
|
AddSideString("cathook by nullifiedcat", colors::RainbowCurrent());
|
||||||
AddSideString(hack::GetVersion(), GUIColor());
|
AddSideString(hack::GetVersion(), GUIColor());
|
||||||
#if NOGUI != 1
|
#if NOGUI != 1
|
||||||
@ -167,12 +171,31 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CE_GOOD(g_pLocalPlayer->entity) && !g_Settings.bInvalid) {
|
if (CE_GOOD(g_pLocalPlayer->entity) && !g_Settings.bInvalid) {
|
||||||
if (TF) SAFE_CALL(hacks::tf2::antidisguise::Draw());
|
PROF_SECTION(PT_total_hacks);
|
||||||
SAFE_CALL(hacks::shared::misc::Draw());
|
if (TF) {
|
||||||
SAFE_CALL(hacks::shared::esp::Draw());
|
PROF_SECTION(PT_antidisguise);
|
||||||
if (TF) SAFE_CALL(hacks::tf::spyalert::Draw());
|
SAFE_CALL(hacks::tf2::antidisguise::Draw());
|
||||||
if (TF) SAFE_CALL(hacks::tf::radar::Draw());
|
}
|
||||||
if (TF2) SAFE_CALL(hacks::tf2::skinchanger::PaintTraverse());
|
{
|
||||||
|
PROF_SECTION(PT_misc);
|
||||||
|
SAFE_CALL(hacks::shared::misc::Draw());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PROF_SECTION(PT_esp);
|
||||||
|
SAFE_CALL(hacks::shared::esp::Draw());
|
||||||
|
}
|
||||||
|
if (TF) {
|
||||||
|
PROF_SECTION(PT_spyalert);
|
||||||
|
SAFE_CALL(hacks::tf::spyalert::Draw());
|
||||||
|
}
|
||||||
|
if (TF) {
|
||||||
|
PROF_SECTION(PT_radar);
|
||||||
|
SAFE_CALL(hacks::tf::radar::Draw());
|
||||||
|
}
|
||||||
|
if (TF2) {
|
||||||
|
PROF_SECTION(PT_skinchanger);
|
||||||
|
SAFE_CALL(hacks::tf2::skinchanger::PaintTraverse());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -180,7 +203,10 @@ void PaintTraverse_hook(void* _this, unsigned int vp, bool fr, bool ar) {
|
|||||||
g_pGUI->Update();
|
g_pGUI->Update();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DrawStrings();
|
{
|
||||||
|
PROF_SECTION(PT_draw_strings);
|
||||||
|
DrawStrings();
|
||||||
|
}
|
||||||
SEGV_END;
|
SEGV_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,8 @@ void DrawModelExecute_hook(IVModelRender* _this, const DrawModelState_t& state,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PROF_SECTION(DrawModelExecute);
|
||||||
|
|
||||||
if (no_arms || no_hats) {
|
if (no_arms || no_hats) {
|
||||||
if (info.pModel) {
|
if (info.pModel) {
|
||||||
name = g_IModelInfo->GetModelName(info.pModel);
|
name = g_IModelInfo->GetModelName(info.pModel);
|
||||||
@ -202,12 +204,18 @@ void FrameStageNotify_hook(void* _this, int stage) {
|
|||||||
static IClientEntity *ent;
|
static IClientEntity *ent;
|
||||||
static ConVar* glow_outline_effect = g_ICvar->FindVar("glow_outline_effect_enable");
|
static ConVar* glow_outline_effect = g_ICvar->FindVar("glow_outline_effect_enable");
|
||||||
|
|
||||||
|
PROF_SECTION(FrameStageNotify_TOTAL);
|
||||||
|
|
||||||
static const FrameStageNotify_t original = (FrameStageNotify_t)hooks::client.GetMethod(offsets::FrameStageNotify());
|
static const FrameStageNotify_t original = (FrameStageNotify_t)hooks::client.GetMethod(offsets::FrameStageNotify());
|
||||||
SEGV_BEGIN;
|
SEGV_BEGIN;
|
||||||
if (!g_IEngine->IsInGame()) g_Settings.bInvalid = true;
|
if (!g_IEngine->IsInGame()) g_Settings.bInvalid = true;
|
||||||
// TODO hack FSN hook
|
// TODO hack FSN hook
|
||||||
hacks::tf2::skinchanger::FrameStageNotify(stage);
|
{
|
||||||
|
PROF_SECTION(FSN_skinchanger);
|
||||||
|
hacks::tf2::skinchanger::FrameStageNotify(stage);
|
||||||
|
}
|
||||||
if (resolver && cathook && !g_Settings.bInvalid && stage == FRAME_NET_UPDATE_POSTDATAUPDATE_START) {
|
if (resolver && cathook && !g_Settings.bInvalid && stage == FRAME_NET_UPDATE_POSTDATAUPDATE_START) {
|
||||||
|
PROF_SECTION(FSN_resolver);
|
||||||
for (int i = 1; i < 32 && i < HIGHEST_ENTITY; i++) {
|
for (int i = 1; i < 32 && i < HIGHEST_ENTITY; i++) {
|
||||||
if (i == g_IEngine->GetLocalPlayer()) continue;
|
if (i == g_IEngine->GetLocalPlayer()) continue;
|
||||||
ent = g_IEntityList->GetClientEntity(i);
|
ent = g_IEntityList->GetClientEntity(i);
|
||||||
@ -233,6 +241,7 @@ void FrameStageNotify_hook(void* _this, int stage) {
|
|||||||
#endif
|
#endif
|
||||||
if (CE_GOOD(LOCAL_E) && no_zoom) RemoveCondition<TFCond_Zoomed>(LOCAL_E);
|
if (CE_GOOD(LOCAL_E) && no_zoom) RemoveCondition<TFCond_Zoomed>(LOCAL_E);
|
||||||
if (glow_outline_effect->GetBool()) {
|
if (glow_outline_effect->GetBool()) {
|
||||||
|
PROF_SECTION(FSN_outline);
|
||||||
if (glow_enabled) {
|
if (glow_enabled) {
|
||||||
for (int i = 0; i < g_GlowObjectManager->m_GlowObjectDefinitions.Size(); i++) {
|
for (int i = 0; i < g_GlowObjectManager->m_GlowObjectDefinitions.Size(); i++) {
|
||||||
GlowObjectDefinition_t& glowobject = g_GlowObjectManager->m_GlowObjectDefinitions[i];
|
GlowObjectDefinition_t& glowobject = g_GlowObjectManager->m_GlowObjectDefinitions[i];
|
||||||
|
@ -33,10 +33,12 @@ void ProfilerSection::OnNodeDeath(ProfilerNode& node) {
|
|||||||
|
|
||||||
if (std::chrono::duration_cast<std::chrono::seconds>(std::chrono::high_resolution_clock::now() - m_log).count() > 3) {
|
if (std::chrono::duration_cast<std::chrono::seconds>(std::chrono::high_resolution_clock::now() - m_log).count() > 3) {
|
||||||
if (do_profiler_logging)
|
if (do_profiler_logging)
|
||||||
logging::Info("[P] stats for '%-32s': MIN{%12llu} MAX{%12llu} AVG{%12llu}", m_name.c_str(),
|
logging::Info("[P],'%-32s',%12llu,%12llu,%12llu,%12llu,%u", m_name.c_str(),
|
||||||
|
std::chrono::duration_cast<std::chrono::nanoseconds>(m_sum).count(),
|
||||||
|
std::chrono::duration_cast<std::chrono::nanoseconds>(m_sum).count() / (m_calls ? m_calls : 1),
|
||||||
std::chrono::duration_cast<std::chrono::nanoseconds>(m_min).count(),
|
std::chrono::duration_cast<std::chrono::nanoseconds>(m_min).count(),
|
||||||
std::chrono::duration_cast<std::chrono::nanoseconds>(m_max).count(),
|
std::chrono::duration_cast<std::chrono::nanoseconds>(m_max).count(),
|
||||||
std::chrono::duration_cast<std::chrono::nanoseconds>(m_sum).count() / (m_calls ? m_calls : 1));
|
m_calls);
|
||||||
m_log = std::chrono::high_resolution_clock::now();
|
m_log = std::chrono::high_resolution_clock::now();
|
||||||
m_min = std::chrono::nanoseconds::zero();
|
m_min = std::chrono::nanoseconds::zero();
|
||||||
m_max = std::chrono::nanoseconds::zero();
|
m_max = std::chrono::nanoseconds::zero();
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
ProfilerSection& m_section;
|
ProfilerSection& m_section;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ENABLE_PROFILER false
|
#define ENABLE_PROFILER true
|
||||||
#if ENABLE_PROFILER
|
#if ENABLE_PROFILER
|
||||||
#define PROF_SECTION(id) \
|
#define PROF_SECTION(id) \
|
||||||
static ProfilerSection __PROFILER__##id(#id); \
|
static ProfilerSection __PROFILER__##id(#id); \
|
||||||
|
Reference in New Issue
Block a user