// похуй работает и работает
/* bool* m_bFireIsBurning = reinterpret_cast<bool*>((DWORD)inferno + 0xE94);
int* m_fireXDelta = reinterpret_cast<int*>((DWORD)inferno + 0x9E4);
int* m_fireYDelta = reinterpret_cast<int*>((DWORD)inferno + 0xB74);
int* m_fireZDelta = reinterpret_cast<int*>((DWORD)inferno + 0xD04);
int m_fireCount = *reinterpret_cast<int*>((DWORD)inferno + 0x13A8);
vec3_t average_vector = vec3_t(0, 0, 0);
vec3_t nice_nick_xuesos;
float range = 0.f;
std::vector<vec3_t> points;
for (int i = 0; i <= m_fireCount; i++) {
if (!m_bFireIsBurning[i])
continue;
vec3_t fire_origin = vec3_t(m_fireXDelta[i], m_fireYDelta[i], m_fireZDelta[i]);
float delta = fire_origin.length_2d() + 14.4f;
if (delta > range)
range = delta;
average_vector += fire_origin;
if (fire_origin == vec3_t(0, 0, 0))
continue;
points.push_back(origin + fire_origin);;
}
if (m_fireCount <= 1)
nice_nick_xuesos = origin;
else
nice_nick_xuesos = (average_vector / m_fireCount) + origin;
static auto get_angle = [](vec3_t point) {
auto a = (point);
vec3_t b = vec3_t(a.length_2d(), 0.f, 0.f);
if (a.y < 0.f)
return float(M_PI * 2.f) - (acos((a.x * b.x + a.y * b.y + a.z * b.z) / (a.length() * b.length())));
return acos((a.x * b.x + a.y * b.y + a.z * b.z) / (a.length() * b.length()));
};
std::sort(points.begin(), points.end(), [&](vec3_t a, vec3_t b) { return get_angle(a - nice_nick_xuesos) > get_angle(b - nice_nick_xuesos); });
render::world_circle(nice_nick_xuesos, range, Color(255, 255, 255, 255));*/