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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions