Кривые хп, и арморы

off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
Имею CSGOSimple (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Дело в том, что мне нужно убрать разные расстояния от хп до бокса, и от бокса до армора.
Вот как это выглядит:
shit1.png
shit2.png
В ппхуде это выглядит так:
zz.png
Уже ночь ебусь со своим хаком, поэтому могу писать невнятно.

bool Visuals::Player::Begin(C_BasePlayer* pl)
{
if (pl->IsDormant() || !pl->IsAlive())
return false;

ctx.pl = pl;
ctx.is_enemy = g_LocalPlayer->m_iTeamNum() != pl->m_iTeamNum();
ctx.is_visible = g_LocalPlayer->CanSeePlayer(pl, HITBOX_CHEST);

if (!ctx.is_enemy && g_Options.esp_enemies_only)
return false;

ctx.clr = ctx.is_enemy ? (ctx.is_visible ? g_Options.color_esp_enemy_visible : g_Options.color_esp_enemy_occluded) : (ctx.is_visible ? g_Options.color_esp_ally_visible : g_Options.color_esp_ally_occluded);

auto head = pl->GetHitboxPos(HITBOX_HEAD);

auto origin = pl->m_vecOrigin();

head.z += 6;

if (!Math::WorldToScreen(head, ctx.head_pos) ||
!Math::WorldToScreen(origin, ctx.feet_pos))
return false;

auto h = fabs(ctx.head_pos.y - ctx.feet_pos.y);
auto w = h / 2.0f;

ctx.bbox.left = static_cast<long>(ctx.feet_pos.x - w * 0.45f);
ctx.bbox.right = static_cast<long>(ctx.bbox.left + w);
ctx.bbox.bottom = static_cast<long>(ctx.feet_pos.y);
ctx.bbox.top = static_cast<long>(ctx.head_pos.y);

return true;
}

void Visuals::Player::RenderBox() {
// Имитация обводки текста
Render::Get().RenderBoxByType(ctx.bbox.left - 1, ctx.bbox.top - 1, ctx.bbox.right + 1, ctx.bbox.bottom + 1, Color(0, 0, 0, 255), 1);
Render::Get().RenderBoxByType(ctx.bbox.left + 1, ctx.bbox.top + 1, ctx.bbox.right - 1, ctx.bbox.bottom - 1, Color(0, 0, 0, 255), 1);

Render::Get().RenderBoxByType(ctx.bbox.left, ctx.bbox.top, ctx.bbox.right, ctx.bbox.bottom, ctx.clr, 1);
}

void Visuals::Player::RenderHealth()
{
auto hp = ctx.pl->m_iHealth();
float box_w = (float)fabs(ctx.bbox.right - ctx.bbox.left);
float box_h = (float)fabs(ctx.bbox.bottom - ctx.bbox.top);
float off = (box_h / 6.f);
//float off = 8;

int height = (box_h * hp) / 100;

int green = int(hp * 2.55f);
int red = 255 - green;

int x = ctx.bbox.left - off;
int y = ctx.bbox.top;
int w = 4;
int h = box_h;

Render::Get().RenderBox(x, y, x + w, y + h, Color::Black, 1.f, true);
Render::Get().RenderBox(x + 1, y + 1, x + w - 1, y + height - 2, Color(red, green, 0, 255), 1.f, true);
}

void Visuals::Player::RenderArmour()
{
auto armour = ctx.pl->m_ArmorValue();
float box_h = (float)fabs(ctx.bbox.bottom - ctx.bbox.top);
float off = (box_h / 6.f);
//float off = 4;

int height = (((box_h * armour) / 100));

int x = ctx.bbox.right + 4;
int y = ctx.bbox.top;
int w = 4;
int h = box_h;

Render::Get().RenderBox(x, y, x + w, y + h, Color::Black, 1.f, true);
Render::Get().RenderBox(x + 1, y + 1, x + w - 1, y + height - 2, Color(0, 50, 255, 255), 1.f, true);
}
Нужно чтобы от смены расстояния (если я буду ходить назад, вперёд), расстояние от ХП до Бокса было одинаковым.
 
Сверху Снизу