Store data of all hitboxes

This commit is contained in:
TotallyNotElite 2018-08-10 16:49:41 +02:00
parent 91d1f45542
commit 1c12209586
5 changed files with 44 additions and 45 deletions

View File

@ -11,15 +11,17 @@
namespace hacks::shared::backtrack namespace hacks::shared::backtrack
{ {
struct hitboxData
{
Vector center{ 0.0f, 0.0f, 0.0f };
Vector min{ 0.0f, 0.0f, 0.0f };
Vector max{ 0.0f, 0.0f, 0.0f };
};
struct BacktrackData struct BacktrackData
{ {
int tickcount{ 0 }; int tickcount{ 0 };
Vector hitboxpos{ 0.0f, 0.0f, 0.0f }; std::array<hitboxData, 18> hitboxes;
Vector min{ 0.0f, 0.0f, 0.0f };
Vector max{ 0.0f, 0.0f, 0.0f };
Vector spine{ 0.0f, 0.0f, 0.0f };
Vector spineMin{ 0.0f, 0.0f, 0.0f };
Vector spineMax{ 0.0f, 0.0f, 0.0f };
float viewangles{ 0.0f }; float viewangles{ 0.0f };
float simtime{ 0.0f }; float simtime{ 0.0f };
Vector entorigin{ 0.0f, 0.0f, 0.0f }; Vector entorigin{ 0.0f, 0.0f, 0.0f };

View File

@ -114,9 +114,9 @@ bool BacktrackAimbot()
{ {
if (hacks::shared::backtrack::ValidTick(i, tar)) if (hacks::shared::backtrack::ValidTick(i, tar))
continue; continue;
if (!i.hitboxpos.z) if (!i.hitboxes.at(head).center.z)
continue; continue;
if (!IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxpos, true)) if (!IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes.at(head).center, true))
continue; continue;
float scr = abs(g_pLocalPlayer->v_OrigViewangles.y - i.viewangles); float scr = abs(g_pLocalPlayer->v_OrigViewangles.y - i.viewangles);
Vector &angles = NET_VECTOR(RAW_ENT(tar), netvar.m_angEyeAngles); Vector &angles = NET_VECTOR(RAW_ENT(tar), netvar.m_angEyeAngles);
@ -124,7 +124,7 @@ bool BacktrackAimbot()
angles.y = i.viewangles; angles.y = i.viewangles;
simtime = i.simtime; simtime = i.simtime;
current_user_cmd->tick_count = i.tickcount; current_user_cmd->tick_count = i.tickcount;
Vector tr = (i.hitboxpos - g_pLocalPlayer->v_Eye); Vector tr = (i.hitboxes.at(head).center - g_pLocalPlayer->v_Eye);
Vector angles2; Vector angles2;
VectorAngles(tr, angles2); VectorAngles(tr, angles2);
// Clamping is important // Clamping is important

View File

@ -167,7 +167,7 @@ void CreateMove()
return; return;
// Check if besttick distance is < 200.0f // Check if besttick distance is < 200.0f
if (backtrack::headPositions[target->m_IDX][backtrack::BestTick] if (backtrack::headPositions[target->m_IDX][backtrack::BestTick]
.spine.DistTo(g_pLocalPlayer->v_Eye) < 200.0f) .hitboxes.at(spine_3).center.DistTo(g_pLocalPlayer->v_Eye) < 200.0f)
besttarget = target; besttarget = target;
} }
@ -219,13 +219,13 @@ void CreateMove()
g_pLocalPlayer->v_Origin); g_pLocalPlayer->v_Origin);
// Get dist Z to Z // Get dist Z to Z
float halfHeight = float halfHeight =
(i.spineMin.DistTo( (i.hitboxes.at(spine_3).min.DistTo(
Vector{ i.spineMin.x, i.spineMin.y, i.spineMax.z })) / Vector{ i.hitboxes.at(spine_3).min.x, i.hitboxes.at(spine_3).min.y, i.hitboxes.at(spine_3).max.z })) /
2; 2;
// Make our first diagonal line // Make our first diagonal line
std::pair<Vector, Vector> line1( std::pair<Vector, Vector> line1(
{ i.spineMin.x, i.spineMin.y, i.spineMin.z + halfHeight }, { i.hitboxes.at(spine_3).min.x, i.hitboxes.at(spine_3).min.y, i.hitboxes.at(spine_3).min.z + halfHeight },
{ i.spineMax.x, i.spineMax.y, i.spineMax.z - halfHeight }); { i.hitboxes.at(spine_3).max.x, i.hitboxes.at(spine_3).max.y, i.hitboxes.at(spine_3).max.z - halfHeight });
// Make our second diagonal line // Make our second diagonal line
std::pair<Vector, Vector> line2( std::pair<Vector, Vector> line2(
{ line1.second.x, line1.first.y, line1.first.z }, { line1.second.x, line1.first.y, line1.first.z },
@ -241,8 +241,8 @@ void CreateMove()
for (angle.y = -180.0f; angle.y < 180.0f; angle.y += 20.0f) for (angle.y = -180.0f; angle.y < 180.0f; angle.y += 20.0f)
{ {
if (unifiedCanBackstab(angle, i.spineMin, i.spineMax, if (unifiedCanBackstab(angle, i.hitboxes.at(spine_3).min, i.hitboxes.at(spine_3).max,
i.spine, besttarget)) i.hitboxes.at(spine_3).center, besttarget))
{ {
current_user_cmd->tick_count = i.tickcount; current_user_cmd->tick_count = i.tickcount;
current_user_cmd->viewangles = angle; current_user_cmd->viewangles = angle;

View File

@ -20,9 +20,8 @@ static settings::Int slots{ "backtrack.slots", "0" };
namespace hacks::shared::backtrack namespace hacks::shared::backtrack
{ {
void EmptyBacktrackData(BacktrackData &i);
BacktrackData headPositions[32][66]{}; BacktrackData headPositions[32][66]{};
BestTickData sorted_ticks[66]{};
int highesttick[32]{}; int highesttick[32]{};
int lastincomingsequencenumber = 0; int lastincomingsequencenumber = 0;
static bool shouldDrawBt; static bool shouldDrawBt;
@ -64,10 +63,7 @@ void Init()
{ {
for (int i = 0; i < 32; i++) for (int i = 0; i < 32; i++)
for (int j = 0; j < 66; j++) for (int j = 0; j < 66; j++)
headPositions[i][j] = BacktrackData{ EmptyBacktrackData(headPositions[i][j]);
0, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0, { 0, 0, 0 }
};
} }
int BestTick = 0; int BestTick = 0;
@ -102,10 +98,7 @@ void Run()
if (CE_BAD(pEntity) || !pEntity->m_bAlivePlayer()) if (CE_BAD(pEntity) || !pEntity->m_bAlivePlayer())
{ {
for (BacktrackData &btd : headPositions[i]) for (BacktrackData &btd : headPositions[i])
btd = BacktrackData{ 0, { 0, 0, 0 }, { 0, 0, 0 }, EmptyBacktrackData(btd);
{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
{ 0, 0, 0 }, 0, 0,
{ 0, 0, 0 } };
continue; continue;
} }
if (pEntity->m_iTeam() == LOCAL_E->m_iTeam()) if (pEntity->m_iTeam() == LOCAL_E->m_iTeam())
@ -114,26 +107,25 @@ void Run()
continue; continue;
if (!pEntity->hitboxes.GetHitbox(0)) if (!pEntity->hitboxes.GetHitbox(0))
continue; continue;
Vector hitboxpos = pEntity->hitboxes.GetHitbox(0)->center;
Vector min = pEntity->hitboxes.GetHitbox(0)->min;
Vector max = pEntity->hitboxes.GetHitbox(0)->max;
float _viewangles = float _viewangles =
NET_VECTOR(RAW_ENT(pEntity), netvar.m_angEyeAngles).y; NET_VECTOR(RAW_ENT(pEntity), netvar.m_angEyeAngles).y;
float viewangles = float viewangles =
(_viewangles > 180) ? _viewangles - 360 : _viewangles; (_viewangles > 180) ? _viewangles - 360 : _viewangles;
float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime); float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime);
Vector hitbox_spine = pEntity->hitboxes.GetHitbox(spine_3)->center; std::array<hitboxData, 18> hbdArray;
Vector hitbox_min = pEntity->hitboxes.GetHitbox(spine_3)->min; for (size_t i = 0; i < hbdArray.max_size(); i++)
Vector hitbox_max = pEntity->hitboxes.GetHitbox(spine_3)->max; {
hbdArray.at(i).center = pEntity->hitboxes.GetHitbox(i)->center;
hbdArray.at(i).min = pEntity->hitboxes.GetHitbox(i)->min;
hbdArray.at(i).max = pEntity->hitboxes.GetHitbox(i)->max;
}
Vector ent_orig = pEntity->InternalEntity()->GetAbsOrigin(); Vector ent_orig = pEntity->InternalEntity()->GetAbsOrigin();
auto hdr = g_IModelInfo->GetStudiomodel(RAW_ENT(pEntity)->GetModel()); auto hdr = g_IModelInfo->GetStudiomodel(RAW_ENT(pEntity)->GetModel());
headPositions[i][cmd->command_number % getTicks()] = headPositions[i][cmd->command_number % getTicks()] =
BacktrackData{ cmd->tick_count, hitboxpos, min, max, BacktrackData{ cmd->tick_count, hbdArray, viewangles, simtime, ent_orig };
hitbox_spine, hitbox_min, hitbox_max, viewangles,
simtime, ent_orig };
float FOVDistance = GetFov(g_pLocalPlayer->v_OrigViewangles, float FOVDistance = GetFov(g_pLocalPlayer->v_OrigViewangles,
g_pLocalPlayer->v_Eye, hitboxpos); g_pLocalPlayer->v_Eye, hbdArray.at(head).center);
float distance = g_pLocalPlayer->v_Eye.DistTo(hitbox_spine); float distance = g_pLocalPlayer->v_Eye.DistTo(hbdArray.at(spine_3).center);
if (!IsMelee && bestFov > FOVDistance && FOVDistance < 60.0f) if (!IsMelee && bestFov > FOVDistance && FOVDistance < 60.0f)
{ {
bestFov = FOVDistance; bestFov = FOVDistance;
@ -160,11 +152,11 @@ void Run()
continue; continue;
tempFOV = GetFov(g_pLocalPlayer->v_OrigViewangles, tempFOV = GetFov(g_pLocalPlayer->v_OrigViewangles,
g_pLocalPlayer->v_Eye, g_pLocalPlayer->v_Eye,
headPositions[iBestTarget][t].hitboxpos); headPositions[iBestTarget][t].hitboxes.at(head).center);
if (IsMelee) if (IsMelee)
{ {
distance = g_pLocalPlayer->v_Eye.DistTo( distance = g_pLocalPlayer->v_Eye.DistTo(
headPositions[iBestTarget][t].spine); headPositions[iBestTarget][t].hitboxes.at(spine_3).center);
if (distance < (float) mindistance) if (distance < (float) mindistance)
continue; continue;
if (distance < prev_distance_ticks) if (distance < prev_distance_ticks)
@ -213,9 +205,9 @@ void Draw()
{ {
if (!ValidTick(headPositions[i][j], ent)) if (!ValidTick(headPositions[i][j], ent))
continue; continue;
auto hbpos = headPositions[i][j].hitboxpos; auto hbpos = headPositions[i][j].hitboxes.at(head).center;
auto min = headPositions[i][j].min; auto min = headPositions[i][j].hitboxes.at(head).min;
auto max = headPositions[i][j].max; auto max = headPositions[i][j].hitboxes.at(head).max;
if (!hbpos.x && !hbpos.y && !hbpos.z) if (!hbpos.x && !hbpos.y && !hbpos.z)
continue; continue;
Vector out; Vector out;
@ -297,4 +289,9 @@ bool ValidTick(BacktrackData &i, CachedEntity *ent)
getLatency() - i.simtime * 1000.0f) < 200.0f; getLatency() - i.simtime * 1000.0f) < 200.0f;
} }
void EmptyBacktrackData(BacktrackData &i)
{
i = {};
}
} // namespace hacks::shared::backtrack } // namespace hacks::shared::backtrack

View File

@ -48,8 +48,8 @@ bool CanBacktrack()
{ {
if(!hacks::shared::backtrack::ValidTick(i, tar)) if(!hacks::shared::backtrack::ValidTick(i, tar))
continue; continue;
auto min = i.min; auto min = i.hitboxes.at(head).min;
auto max = i.max; auto max = i.hitboxes.at(head).max;
if (!min.x && !max.x) if (!min.x && !max.x)
continue; continue;