402 lines
10 KiB
C++
402 lines
10 KiB
C++
#include "hooks.h"
|
||
|
||
#define COLORESP (gCvars.espcolor[0]), (gCvars.espcolor[1]), (gCvars.espcolor[2]), 255
|
||
|
||
void ESP::DrawMonitor(int x, int y, CBaseEntity * entity)
|
||
{
|
||
int sizex = 50;
|
||
int sizey = 100;
|
||
|
||
if (g_Mouse.LeftClick(gCvars.f1monitorpos_x - (sizex / 2) - 6, gCvars.f1monitorpos_y - (sizey / 2) - 6, sizex * 2 + 12, sizey * 2 + 12))
|
||
{
|
||
gCvars.f1monitorpos_x = g_Mouse.mouse_x;
|
||
gCvars.f1monitorpos_y = g_Mouse.mouse_y;
|
||
gCvars.f1monitorpos_x = gCvars.f1monitorpos_x;
|
||
gCvars.f1monitorpos_y = gCvars.f1monitorpos_y;
|
||
}
|
||
|
||
int centerx = gCvars.f1monitorpos_x + (sizex / 2);
|
||
int centery = gCvars.f1monitorpos_y + (sizey / 2);
|
||
|
||
Draw::FillRGBA(centerx - sizex - 6, centery - sizey - 20, 2 * sizex + 12, 2 * sizey + 26, 35, 35, 35, 255);
|
||
Draw::OutlinedRectangle(centerx - sizex - 6, centery - sizey - 20, 2 * sizex + 12, 2 * sizey + 26, 0, 0, 0, 254);
|
||
|
||
Draw::DrawStringA(Fonts::m_MenuFont, false, centerx - sizex, centery - sizey - 19, 255, 255, 255, 255, "Monitor");
|
||
Draw::FillRGBA(centerx - sizex, centery - sizey, 2 * sizex, 2 * sizey, 50, 50, 50, 255);
|
||
|
||
Draw::OutlinedRectangle(centerx - sizex, centery - sizey, 2 * sizex, 2 * sizey, 0, 0, 0, 254);
|
||
|
||
int iSpeed = 0;
|
||
float flPunch = 0.0f;
|
||
|
||
Vector vSpeed = entity->GetVelocity();
|
||
iSpeed = (int)vSpeed.Length2D();
|
||
|
||
Vector pAngle = entity->GetPunchAngle();
|
||
float flModifier = pAngle.Normalize();
|
||
|
||
flModifier -= (10.0f + flModifier * 0.5f) * pGlobalvars->interval_per_tick;
|
||
pAngle *= flModifier;
|
||
flPunch = ((pAngle.x * 17.77777777777778) * 1.25);
|
||
|
||
Draw::DrawMonitorBar(centerx - sizex + 9, centery - sizey + 12, (-flPunch), "Recoil");
|
||
Draw::DrawMonitorBar(centerx - sizex + 59, centery - sizey + 12, (iSpeed * 0.2), "Speed");
|
||
}
|
||
|
||
RECT ESP::DynamicBox(CBaseEntity* pPlayer, bool& PVS, CBaseEntity* local)
|
||
{
|
||
Vector trans = pPlayer->GetAbsOrigin();
|
||
|
||
Vector min;
|
||
Vector max;
|
||
|
||
min = pPlayer->GetMins();
|
||
max = pPlayer->GetMaxs();
|
||
|
||
Vector pointList[] = {
|
||
Vector(min.x, min.y, min.z),
|
||
Vector(min.x, max.y, min.z),
|
||
Vector(max.x, max.y, min.z),
|
||
Vector(max.x, min.y, min.z),
|
||
Vector(max.x, max.y, max.z),
|
||
Vector(min.x, max.y, max.z),
|
||
Vector(min.x, min.y, max.z),
|
||
Vector(max.x, min.y, max.z)
|
||
};
|
||
|
||
Vector Distance = pointList[0] - pointList[1];
|
||
int dst = Distance.Length();
|
||
dst /= 1.3f;
|
||
Vector angs;
|
||
Math::CalcAngle(trans, local->GetEyePosition(), angs);
|
||
|
||
Vector all[8];
|
||
angs.y += 45;
|
||
for (int i = 0; i < 4; i++)
|
||
{
|
||
Math::angleVectors(angs,all[i]);
|
||
all[i] *= dst;
|
||
all[i + 4] = all[i];
|
||
all[i].z = max.z;
|
||
all[i + 4].z = min.z;
|
||
VectorAdd(all[i], trans, all[i]);
|
||
VectorAdd(all[i + 4], trans, all[i + 4]);
|
||
angs.y += 90;
|
||
}
|
||
|
||
Vector flb, brt, blb, frt, frb, brb, blt, flt;
|
||
PVS = true;
|
||
|
||
if (!Draw::WorldToScreen(all[3], flb))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[0], blb))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[2], frb))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[6], blt))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[5], brt))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[4], frt))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[1], brb))
|
||
PVS = false;
|
||
if (!Draw::WorldToScreen(all[7], flt))
|
||
PVS = false;
|
||
|
||
Vector arr[] = { flb, brt, blb, frt, frb, brb, blt, flt };
|
||
|
||
float left = flb.x;
|
||
float top = flb.y;
|
||
float right = flb.x;
|
||
float bottom = flb.y;
|
||
|
||
for (int i = 0; i < 8; i++)
|
||
{
|
||
if (left > arr[i].x)
|
||
left = arr[i].x;
|
||
if (top > arr[i].y)
|
||
top = arr[i].y;
|
||
if (right < arr[i].x)
|
||
right = arr[i].x;
|
||
if (bottom < arr[i].y)
|
||
bottom = arr[i].y;
|
||
}
|
||
RECT rect;
|
||
rect.left = left;
|
||
rect.bottom = bottom;
|
||
rect.right = right;
|
||
rect.top = top;
|
||
return rect;
|
||
}
|
||
|
||
|
||
void ESP::drawvelocity(int screenWidth, int screenHeight, CBaseEntity* local_player)
|
||
{
|
||
Vector speed = local_player->GetVelocity();
|
||
|
||
int intspeed = round(speed.Length2D());
|
||
|
||
char vel[256];
|
||
|
||
sprintf_s(vel, "%d", intspeed);
|
||
|
||
Draw::DrawStringA(Fonts::m_VelocityFont, true, screenWidth / 2, screenHeight - 100, COLORESP, vel);
|
||
}
|
||
|
||
void ESP::drawradar(int screenwidght, int screenhight, CBaseEntity* local)
|
||
{
|
||
for (int ax = 1; ax <= pEntList->GetHighestEntityIndex(); ax++)
|
||
{
|
||
CBaseEntity * pEntity = pEntList->GetClientEntity(ax);
|
||
|
||
if (!pEntity || pEntity == local || pEntity->IsDormant())
|
||
continue;
|
||
|
||
if (!pEntity->GetModel())
|
||
continue;
|
||
|
||
if (pEntity->GetTeamNum() == TEAM_SURVIVOR)
|
||
continue;
|
||
|
||
std::int32_t nClassID = pEntity->GetClientClass()->GetClassID;
|
||
|
||
if (!pEntity->GetGroup() && !pEntity->ValidEntity())
|
||
continue;
|
||
|
||
static Vector vClientViewAngles;
|
||
|
||
pEngine->GetViewAngles(vClientViewAngles);
|
||
|
||
DrawRadarPoint(pEntity->GetAbsOrigin(), local->GetAbsOrigin(), vClientViewAngles);
|
||
}
|
||
}
|
||
|
||
void ESP::DrawRadarBack(int screenwidght, int screenhight)
|
||
{
|
||
bool bSave_Radar_Pos = true;
|
||
|
||
int size = 110;
|
||
size -= 10;
|
||
|
||
if (g_Mouse.LeftClick(gCvars.flRadarPos_x - (size / 2) - 6, gCvars.flRadarPos_y - (size / 2) - 6, size * 2 + 12, size * 2 + 12))
|
||
{
|
||
if (!bSave_Radar_Pos)
|
||
{
|
||
gCvars.iSavedRadarX = g_Mouse.mouse_x - gCvars.flRadarPos_x;
|
||
gCvars.iSavedRadarY = g_Mouse.mouse_y - gCvars.flRadarPos_y;
|
||
bSave_Radar_Pos = true;
|
||
}
|
||
gCvars.flRadarPos_x = g_Mouse.mouse_x;
|
||
gCvars.flRadarPos_y = g_Mouse.mouse_y;
|
||
gCvars.flRadarPos_x = gCvars.flRadarPos_x - gCvars.iSavedRadarX;
|
||
gCvars.flRadarPos_y = gCvars.flRadarPos_y - gCvars.iSavedRadarY;
|
||
}
|
||
else
|
||
{
|
||
bSave_Radar_Pos = false;
|
||
}
|
||
|
||
int centerx = gCvars.flRadarPos_x + (size / 2);
|
||
int centery = gCvars.flRadarPos_y + (size / 2);
|
||
|
||
Draw::FillRGBA(centerx - size - 6, centery - size - 20, 2 * size + 12, 2 * size + 26, 35, 35, 35, 255);
|
||
Draw::OutlinedRectangle(centerx - size - 6, centery - size - 20, 2 * size + 12, 2 * size + 26, 0, 0, 0, 254);
|
||
|
||
Draw::DrawStringA(Fonts::m_MenuFont, false, centerx - size, centery - size - 19, 255, 255, 255, 255, "Radar");
|
||
Draw::FillRGBA(centerx - size, centery - size, 2 * size, 2 * size, 50, 50, 50, 255);
|
||
|
||
Draw::OutlinedRectangle(centerx - size, centery - size, 2 * size, 2 * size, 0, 0, 0, 254);
|
||
Draw::FillRGBA(centerx, centery - size, 1, 2 * size, 0, 0, 0, 120);
|
||
Draw::FillRGBA(centerx - size, centery, 2 * size, 1, 0, 0, 0, 120);
|
||
}
|
||
|
||
void ESP::DrawRadarPoint(Vector vecOriginx, Vector vecOriginy, Vector vAngle)
|
||
{
|
||
int size = 110;
|
||
|
||
int centerx = gCvars.flRadarPos_x + (size / 2);
|
||
int centery = gCvars.flRadarPos_y + (size / 2);
|
||
|
||
float dx = vecOriginx.x - vecOriginy.x;
|
||
float dy = vecOriginx.y - vecOriginy.y;
|
||
float flAngle = vAngle.y;
|
||
float yaw = (flAngle)* (PI / 180.0);
|
||
float mainViewAngles_CosYaw = cos(yaw);
|
||
float mainViewAngles_SinYaw = sin(yaw);
|
||
float x = dy * (-mainViewAngles_CosYaw) + dx * mainViewAngles_SinYaw;
|
||
float y = dx * (-mainViewAngles_CosYaw) - dy * mainViewAngles_SinYaw;
|
||
float range = size * 30;
|
||
if (fabs(x) > range || fabs(y) > range)
|
||
{
|
||
if (y > x)
|
||
{
|
||
if (y > -x) {
|
||
x = range * x / y;
|
||
y = range;
|
||
}
|
||
else {
|
||
y = -range * y / x;
|
||
x = -range;
|
||
}
|
||
}
|
||
else {
|
||
if (y > -x) {
|
||
y = range * y / x;
|
||
x = range;
|
||
}
|
||
else {
|
||
x = -range * x / y;
|
||
y = -range;
|
||
}
|
||
}
|
||
}
|
||
int ScreenX = centerx + int(x / range * float(size));
|
||
int ScreenY = centery + int(y / range * float(size));
|
||
size -= 10;
|
||
int radar_menu_x = centerx;
|
||
int radar_menu_y = centery;
|
||
|
||
if (ScreenX < radar_menu_x - size)
|
||
ScreenX = radar_menu_x - size + 1;
|
||
else if (ScreenX > radar_menu_x + size)
|
||
ScreenX = radar_menu_x + size - 3;
|
||
|
||
if (ScreenY < radar_menu_y - size)
|
||
ScreenY = radar_menu_y - size + 2;
|
||
else if (ScreenY > radar_menu_y + size)
|
||
ScreenY = radar_menu_y + size - 4;
|
||
|
||
Draw::FillRGBA(ScreenX - 1, ScreenY - 1, 4, 4, 255, 255, 255, 255);
|
||
}
|
||
|
||
void ESP::draw(CBaseEntity* pLocal)
|
||
{
|
||
Vector screen, worldpos;
|
||
|
||
int iMyTeam = pLocal->GetTeamNum();
|
||
|
||
for (int i = 1; i <= pEntList->GetHighestEntityIndex(); i++)
|
||
{
|
||
CBaseEntity * pEntity = pEntList->GetClientEntity(i);
|
||
|
||
if (!pEntity || pEntity == pLocal || pEntity->IsDormant())
|
||
continue;
|
||
|
||
if (!pEntity->GetModel())
|
||
continue;
|
||
|
||
int iTeamNum = pEntity->GetTeamNum();
|
||
|
||
if (iTeamNum == iMyTeam)
|
||
continue;
|
||
|
||
//Draw Player Box ESP
|
||
if (pEntity->GetGroup() && pEntity->ValidEntityIgnoreInfected())
|
||
{
|
||
DrawPlayer(pEntity, pLocal);
|
||
}
|
||
}
|
||
}
|
||
|
||
void ESP::DrawBox(const RECT& rect)
|
||
{
|
||
pSurface->DrawSetColor(COLORESP);
|
||
pSurface->DrawOutlinedRect(rect.left, rect.top, rect.right, rect.bottom);
|
||
pSurface->DrawSetColor(0,0,0,255);
|
||
pSurface->DrawOutlinedRect(rect.left - 1, rect.top - 1, rect.right + 1, rect.bottom + 1);
|
||
pSurface->DrawOutlinedRect(rect.left + 1, rect.top + 1, rect.right - 1, rect.bottom - 1);
|
||
}
|
||
|
||
|
||
void ESP::DrawPlayer(CBaseEntity * pEntity, CBaseEntity * local)
|
||
{
|
||
bool PVS = false;
|
||
RECT rect = DynamicBox(pEntity, PVS, local);
|
||
|
||
if (gCvars.ESPBOX)
|
||
{
|
||
DrawBox(rect);
|
||
}
|
||
|
||
if (gCvars.ESPNAME || gCvars.ESPHEALTH)
|
||
{
|
||
int middle = ((rect.right - rect.left) / 2) + rect.left;
|
||
|
||
char * szname{ pEntity->GetClientClass()->GetName };
|
||
|
||
int inthealth = pEntity->GetHealth();
|
||
|
||
char helfl[256];
|
||
|
||
sprintf_s(helfl, "(%d)", inthealth);
|
||
|
||
if (local->GetTeamNum() == TEAM_SURVIVOR)
|
||
{
|
||
|
||
if (pEntity->GetGroup() == GROUP_INFECTED)
|
||
{
|
||
if (gCvars.ESPNAME)
|
||
{
|
||
if (gCvars.INGOREINFECTED)
|
||
return;
|
||
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.top - 15, 255, 255, 255, 255, "zombie");
|
||
}
|
||
}
|
||
|
||
if (pEntity->GetGroup() == GROUP_SPECIAL)
|
||
{
|
||
if (gCvars.ESPNAME)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.top - 15, 255, 255, 255, 255, szname);
|
||
}
|
||
|
||
if (gCvars.ESPHEALTH)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.bottom + 1, 255, 255, 255, 255, helfl);
|
||
}
|
||
}
|
||
|
||
if (pEntity->GetGroup() == GROUP_TANK)
|
||
{
|
||
if (gCvars.ESPNAME)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.top - 15, 255, 255, 255, 255, "Tank");
|
||
}
|
||
|
||
if (gCvars.ESPHEALTH)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.bottom + 1, 255, 255, 255, 255, helfl);
|
||
}
|
||
}
|
||
|
||
if (pEntity->GetGroup() == GROUP_BITCH)
|
||
{
|
||
if (gCvars.ESPNAME)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.top - 15, 255, 255, 255, 255, "Witch");
|
||
}
|
||
}
|
||
}
|
||
|
||
if (local->GetTeamNum() == TEAM_ZOMBY)
|
||
{
|
||
if (pEntity->GetGroup() == GROUP_PLAYER)
|
||
{
|
||
if (pEntity->GetTeamNum() == TEAM_SURVIVOR && pEntity->GetLifeState() == LIFE_ALIVE)
|
||
{
|
||
if (gCvars.ESPNAME)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.top - 15, 255, 255, 255, 255, "Survivor");
|
||
}
|
||
|
||
if (gCvars.ESPHEALTH)
|
||
{
|
||
Draw::DrawStringA(Fonts::m_MenuFont, true, middle, rect.bottom + 1, 255, 255, 255, 255, helfl);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |