Skip to content

[BUG]: Bugged KnifeHit alghoritm #1154

Description

@huisos43

👉👈 Contact Details (optional)

pornhub.com

🤔 What happened?

Привет древние греки!

Так-как половину переводчиков языков блевотно и некорректно переводят мои сообщения с десяток языков которых я знаю - я буду писать на русском так-как хорошо его выучил, заранее извиняюсь если это не соответствует правилам создания issue в ReGameDll.

Сам баг заключается в проверке хита(удара) ножом и регистрация луча попадания в игрока.

Посмотрите внимательно на следующий код -

BOOL CKnife::Stab(BOOL fFirst)
{
BOOL fDidHit = FALSE;
TraceResult tr;
Vector vecSrc, vecEnd;
UTIL_MakeVectors(m_pPlayer->pev->v_angle);
vecSrc = m_pPlayer->GetGunPosition();
vecEnd = vecSrc + gpGlobals->v_forward * KnifeStabDistance();
#ifdef REGAMEDLL_ADD
gpGlobals->trace_flags = FTRACE_KNIFE;
#endif
UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, m_pPlayer->edict(), &tr);
if (tr.flFraction >= 1.0f)
{
#ifdef REGAMEDLL_ADD
gpGlobals->trace_flags = FTRACE_KNIFE;
#endif
UTIL_TraceHull(vecSrc, vecEnd, dont_ignore_monsters, head_hull, m_pPlayer->edict(), &tr);
#ifdef REGAMEDLL_ADD
// We manually reset it because Engine doesn't unlike TraceLine
gpGlobals->trace_flags = 0;
#endif
if (tr.flFraction < 1.0f)
{
// Calculate the point of intersection of the line (or hull) and the object we hit
// This is and approximation of the "best" intersection
CBaseEntity *pHit = CBaseEntity::Instance(tr.pHit);
if (!pHit || pHit->IsBSPModel())
{
FindHullIntersection(vecSrc, tr, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX, m_pPlayer->edict());
}
// This is the point on the actual surface (the hull could have hit space)
vecEnd = tr.vecEndPos;
}
}

Происходит трассировка TraceLine, дальше происходит проверка по TraceHull и HullIntersection, этот код рабочий, но немного вызывает вопросы в практике.

Если вы на карте "35hp_2" встанете повыше на рампу(наклонную поверхность), противник встанет чуть ниже вас, если вы нацелитесь на него при этом у вас viewangles.x (по высоте) будет 0.f (намного выше головы) (force_centerview), то при ударе вы попадете в врага, хотя ваша биссектриса огромная. Но если вы запрыгнете на голову противника и стоя попытаетесь ударить смотря вниз в противника, то удар не зарегистрируется, хотя биссектриса намного меньше чем в первом случае, это уже вызывает вопросы (касательно регистрации удара по BBox (bounding box)).

Также, если противник будет стоять на два метре выше чем вы, вы подойдёте вплотную к стенке, повернетесь задом, прыгните и ударите пкмом, то ваш удар зарегистрирует, хотя смотря ровно на врага оно не зарегистрирует, в первом варианте биссектриса всё ещё больше чем во втором, хотя регистрация есть.

На проблему с лаг-компенсацией или "удар сносит ветром" это не особо похоже, противник стоит и не двигается (drop-пакетов быть не может), здесь прямая атака от одного игрока которая не понятным образом регистрируется через HullIntersection.

Упоминать другие баги с регистрацией по HullIntersection я не могу, так-как это будут использовать читеры.

⚠️ Meta-information

Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.14.0.857-dev
Build date: 19:52:21 Mar 27 2025 (4002)
Build from: https://github.com/rehlds/ReHLDS/commit/89958d3

ReGameDLL version: 5.28.0.0-dev
Build date: 18:47:07 Feb 04 2026
Build from:

Metamod-r v1.3.0.149, API (5:13)
Metamod-r build: 11:31:17 Apr 23 2024
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/603a257

MyArena-Hosting

📄 Relevant log output

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions