This commit is contained in:
julianacat 2017-08-15 13:13:56 -05:00
parent 265540cd60
commit c589b982b5
3 changed files with 106 additions and 15 deletions

View File

@ -147,3 +147,4 @@ void Invalidate() {
}
}

View File

@ -693,14 +693,18 @@ std::unordered_map<studiohdr_t*, bonelist_s> bonelist_map {};
* According to profiler, this function is the most time-consuming (and gets called up to 200K times a second)
*/
CatEnum emoji_esp({ "None", "Joy", "Thinking" });
CatVar joy_esp(CV_SWITCH, "esp_emoji", "0", "Emoji ESP");
CatVar joy_esp_size(CV_FLOAT, "esp_emoji_size", "32", "Emoji ESP Size");
CatEnum emoji_esp_enum({ "None", "Joy", "Thinking" });
CatVar emoji_esp(emoji_esp_enum, "esp_emoji", "0", "Emoji ESP", "Draw emoji on peopels head");
CatVar emoji_esp_size(CV_FLOAT, "esp_emoji_size", "32", "Emoji ESP Size");
CatVar emoji_esp_scaling(CV_SWITCH, "esp_emoji_scaling", "1", "Emoji ESP Scaling");
CatVar emoji_min_size(CV_INT, "esp_emoji_min_size", "20", "Emoji ESP min size", "Minimum size for an emoji when you use auto scaling");
textures::AtlasTexture joy_texture(64 * 4, textures::atlas_height - 64 * 4, 64, 64);
textures::AtlasTexture thinking_texture(64 * 5, textures::atlas_height - 64 * 4, 64, 64);
//CatVar draw_hitbox(CV_SWITCH, "esp_hitbox", "1", "Draw Hitbox");
// Used when processing entitys with cached data from createmove
void _FASTCALL ProcessEntityPT(CachedEntity* ent) {
PROF_SECTION(PT_esp_process_entity);
@ -758,19 +762,19 @@ void _FASTCALL ProcessEntityPT(CachedEntity* ent) {
// Emoji esp
if (ent->m_Type == ENTITY_PLAYER) {
if (joy_esp) {
if (emoji_esp) {
auto hb = ent->hitboxes.GetHitbox(0);
Vector hbm, hbx;
if (draw::WorldToScreen(hb->min, hbm) && draw::WorldToScreen(hb->max, hbx)) {
Vector head_scr;
if (draw::WorldToScreen(hb->center, head_scr)) {
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y) : float(joy_esp_size);
float size = emoji_esp_scaling ? fabs(hbm.y - hbx.y) : float(emoji_esp_size);
if (emoji_esp_scaling && (size < float(emoji_min_size))) {
size = float(emoji_min_size);
}
textures::AtlasTexture* tx = nullptr;
if (int(joy_esp) == 1) tx = &joy_texture;
if (int(joy_esp) == 2) tx = &thinking_texture;
if (int(emoji_esp) == 1) tx = &joy_texture;
if (int(emoji_esp) == 2) tx = &thinking_texture;
if (tx)
tx->Draw(head_scr.x - size / 2, head_scr.y - size / 2, size, size);
}
@ -778,6 +782,51 @@ void _FASTCALL ProcessEntityPT(CachedEntity* ent) {
}
}
// TODO Add Rotation matix
// TODO Currently crashes, needs null check somewhere
// Draw Hitboxes
/*if (draw_hitbox && ent->m_Type == ENTITY_PLAYER) {
// Loop through hitboxes
for (int i = 0; i <= 17; i++) { // I should probs get how many hitboxes instead of using a fixed number...
// Get a hitbox from the entity
hitbox_cache::CachedHitbox* hb = ent->hitboxes.GetHitbox(i);
// Create more points from min + max
Vector box_points[8];
Vector vec_tmp;
for (int ii = 0; ii <= 8; ii++) { // 8 points to the box
// logic le paste from sdk
vec_tmp[0] = ( ii & 0x1 ) ? hb->max[0] : hb->min[0];
vec_tmp[1] = ( ii & 0x2 ) ? hb->max[1] : hb->min[1];
vec_tmp[2] = ( ii & 0x4 ) ? hb->max[2] : hb->min[2];
// save to points array
box_points[ii] = vec_tmp;
}
// Draw box from points
// Draws a point to every other point. Ineffient, use now fix later...
Vector scn1, scn2; // to screen
for (int ii = 0; ii < 8; ii++) {
// Get first point
if (!draw::WorldToScreen(box_points[ii], scn1)) continue;
for (int iii = 0; iii < 8; iii++) {
// Get second point
if (!draw::WorldToScreen(box_points[iii], scn2)) continue;
// Draw between points
drawgl::Line(scn1.x, scn1.y, scn2.x - scn1.x, scn2.y - scn1.y, fg);
}
}
}
}*/
// Box esp
if (box_esp) {
switch (ent->m_Type) {
@ -796,7 +845,9 @@ void _FASTCALL ProcessEntityPT(CachedEntity* ent) {
break;
}
}
// Draw strings ???
// TODO reverse this
bool origin_is_zero = !box_esp || ent_data.esp_origin.IsZero(1.0f);
if (origin_is_zero) ent_data.esp_origin = screen;
if (ent_data.string_count) {

View File

@ -143,7 +143,22 @@ static CatCommand test_chat_print("debug_print_chat", "machine broke", [](const
});
static CatVar tauntslide_tf2(CV_SWITCH, "tauntslide_tf2", "0", "Tauntslide", "Allows free movement while taunting with movable taunts\nOnly works in tf2\nWIP");
CatVar tauntslide_tf2(CV_SWITCH, "tauntslide_tf2", "0", "Tauntslide", "Allows free movement while taunting with movable taunts\nOnly works in tf2");
CatVar auto_balance_spam(CV_SWITCH, "equest_balance_spam", "0", "Inf Auto Balance Spam", "Use to send a autobalance request to the server that doesnt prevent you from using it again\nCredits to Blackfire");
// Use to send a autobalance request to the server that doesnt prevent you from using it again
// Allowing infinite use of it.
// Credits to blackfire
void SendAutoBalanceRequest() {
if (!g_IEngine->IsInGame()) return;
KeyValues* kv = new KeyValues("AutoBalanceVolunteerReply");
kv->SetInt("response", 1);
g_IEngine->ServerCmdKeyValues(kv);
}
// Catcommand for above
CatCommand SendAutoBlRqCatCom("request_balance", "Request Infinite Auto-Balance", [](const CCommand& args) {
SendAutoBalanceRequest();
});
void CreateMove() {
static bool flswitch = false;
@ -320,31 +335,55 @@ void CreateMove() {
flswitch = !flswitch;
}
static float afkTimeIdle = 0;
// Check if user settings allow anti-afk
// AntiAfk That after a certian time without movement keys depressed, causes random keys to be spammed for 1 second
if (anti_afk) {
// Time last idle
static float afk_time_idle = 0;
// If the timer exceeds 1 minute, jump and reset the timer
if (g_GlobalVars->curtime - 60 > afkTimeIdle) {
if (g_GlobalVars->curtime - 60 > afk_time_idle) {
// Send random commands
g_pUserCmd->sidemove = RandFloatRange(-450.0, 450.0);
g_pUserCmd->forwardmove = RandFloatRange(-450.0, 450.0);
g_pUserCmd->buttons = rand();
// Prevent attack command
g_pUserCmd->buttons &= ~IN_ATTACK;
// After 1 second we reset the idletime
if (g_GlobalVars->curtime - 61 > afkTimeIdle) {
if (g_GlobalVars->curtime - 61 > afk_time_idle) {
logging::Info("Finish anti-idle");
afkTimeIdle = g_GlobalVars->curtime;
afk_time_idle = g_GlobalVars->curtime;
}
} else {
// If the player uses a button, reset the timer
if (g_pUserCmd->buttons & IN_FORWARD || g_pUserCmd->buttons & IN_BACK || g_pUserCmd->buttons & IN_MOVELEFT || g_pUserCmd->buttons & IN_MOVERIGHT || g_pUserCmd->buttons & IN_JUMP || !LOCAL_E->m_bAlivePlayer)
afkTimeIdle = g_GlobalVars->curtime;
afk_time_idle = g_GlobalVars->curtime;
}
}
IF_GAME (IsTF2()) {
// Spams infinite autobalance spam function
if (auto_balance_spam) {
// Time Last used
static float auto_balance_time = 0;
// If the timer exceeds 1 minute, jump and reset the timer
if (g_GlobalVars->curtime - 0.15 > auto_balance_time) {
// Use the Inf Request func
SendAutoBalanceRequest();
// Reset timer
auto_balance_time = g_GlobalVars->curtime;
}
}
// Simple No-Push through cvars
if (nopush_enabled == pNoPush-> GetBool()) pNoPush->SetValue (!nopush_enabled);
}
}