Вопрос Side detection in lw

Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2021
Сообщения
92
Реакции[?]
18
Поинты[?]
0
Смотрите, есть вот такой вариант из snazzy
Код:
                /* externs */
                Vector src3D, dst3D, forward, right, up, src, dst;
                float back_two, right_two, left_two;
                CGameTrace tr;
                CTraceFilter filter;

                /* angle vectors */
                math::angle_vectors(Vector(0, get_backward_side(e), 0), &forward, &right, &up);

                /* filtering */
                filter.SetPassEntity(e);
                src3D = e->get_shoot_position();
                dst3D = src3D + (forward * 384);

                /* back engine tracers */
                m_trace()->TraceRay(Ray_t(src3D, dst3D), MASK_SHOT, &filter, &tr);
                back_two = (tr.endpos - tr.startpos).Length();

                /* right engine tracers */
                m_trace()->TraceRay(Ray_t(src3D + right * 35, dst3D + right * 35), MASK_SHOT, &filter, &tr);
                right_two = (tr.endpos - tr.startpos).Length();

                /* left engine tracers */
                m_trace()->TraceRay(Ray_t(src3D - right * 35, dst3D - right * 35), MASK_SHOT, &filter, &tr);
                left_two = (tr.endpos - tr.startpos).Length();

                /* side detection */
                if (left_two > right_two) {
                    side = -1;
                }
                else if (right_two > left_two) {
                    side = 1;
                }
                else
                    side = 0;
Но помоему он как-то кривовато работает (ОН СУКА НЕ РАБОТАЕТ ВОООБЩЕ)
Еще есть вариант такой:
Код:
           /* if (eyegoalfeetdelta < 0.0f || (*(float*)((DWORD)animstate + 0x330)) == 0.0f)
            {
                if ((*(float*)((DWORD)animstate + 0x330)) != 0.0f)
                    new_body_yaw = (eyegoalfeetdelta / (*(float*)((DWORD)animstate + 0x330))) * -58.0f;
            }
            else
            {
                new_body_yaw = (eyegoalfeetdelta / (*(float*)((DWORD)animstate + 0x334))) * 58.0f;
            }

            if (new_body_yaw > 11.f)
                side = 1;
            else if (new_body_yaw < -11.f)
                side = -1;
            else
                side = 0;*/
Этот я не тестировал но думаю тоже калл.
И еще маленький вопросик, что делают эти строки?
Код:
   if (e->m_vecVelocity().Length2D() <= 0.1)
        {
            if (server_animlayers[ANIMATION_LAYER_ADJUST].m_flWeight == 0.0
                && server_animlayers[ANIMATION_LAYER_ADJUST].m_flCycle == 0.0)
            {
                side = 2 * (math::angle_diff(animstate->m_flEyeYaw, animstate->m_flGoalFeetYaw) <= 0.0) - 1;
            }
        }
        else if (!(server_animlayers[ANIMATION_LAYER_LEAN].m_flWeight * 1000.0) && (server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0) == (previous_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0)) //the shit was 1000 iirc u can double check if u want
        {
            auto first_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_AIMMATRIX][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
            auto second_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_WEAPON_ACTION_RECROUCH][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
            auto third_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_WEAPON_ACTION][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);

        if (first_delta < second_delta || third_delta <= second_delta || (second_delta * 1000.0))
        {
            if (first_delta >= third_delta && second_delta > third_delta && !(third_delta * 1000.0))
                {
                    side = 1;
                }
            }
            else
            {
                side = -1;
            }
        }
 
Начинающий
Статус
Оффлайн
Регистрация
20 Июн 2021
Сообщения
7
Реакции[?]
0
Поинты[?]
0
теперь ждем пока пастеры подумают как детектить сайд 0_____о
Смотрите, есть вот такой вариант из snazzy
Код:
                /* externs */
                Vector src3D, dst3D, forward, right, up, src, dst;
                float back_two, right_two, left_two;
                CGameTrace tr;
                CTraceFilter filter;

                /* angle vectors */
                math::angle_vectors(Vector(0, get_backward_side(e), 0), &forward, &right, &up);

                /* filtering */
                filter.SetPassEntity(e);
                src3D = e->get_shoot_position();
                dst3D = src3D + (forward * 384);

                /* back engine tracers */
                m_trace()->TraceRay(Ray_t(src3D, dst3D), MASK_SHOT, &filter, &tr);
                back_two = (tr.endpos - tr.startpos).Length();

                /* right engine tracers */
                m_trace()->TraceRay(Ray_t(src3D + right * 35, dst3D + right * 35), MASK_SHOT, &filter, &tr);
                right_two = (tr.endpos - tr.startpos).Length();

                /* left engine tracers */
                m_trace()->TraceRay(Ray_t(src3D - right * 35, dst3D - right * 35), MASK_SHOT, &filter, &tr);
                left_two = (tr.endpos - tr.startpos).Length();

                /* side detection */
                if (left_two > right_two) {
                    side = -1;
                }
                else if (right_two > left_two) {
                    side = 1;
                }
                else
                    side = 0;
Но помоему он как-то кривовато работает (ОН СУКА НЕ РАБОТАЕТ ВОООБЩЕ)
Еще есть вариант такой:
Код:
           /* if (eyegoalfeetdelta < 0.0f || (*(float*)((DWORD)animstate + 0x330)) == 0.0f)
            {
                if ((*(float*)((DWORD)animstate + 0x330)) != 0.0f)
                    new_body_yaw = (eyegoalfeetdelta / (*(float*)((DWORD)animstate + 0x330))) * -58.0f;
            }
            else
            {
                new_body_yaw = (eyegoalfeetdelta / (*(float*)((DWORD)animstate + 0x334))) * 58.0f;
            }

            if (new_body_yaw > 11.f)
                side = 1;
            else if (new_body_yaw < -11.f)
                side = -1;
            else
                side = 0;*/
Этот я не тестировал но думаю тоже калл.
И еще маленький вопросик, что делают эти строки?
Код:
   if (e->m_vecVelocity().Length2D() <= 0.1)
        {
            if (server_animlayers[ANIMATION_LAYER_ADJUST].m_flWeight == 0.0
                && server_animlayers[ANIMATION_LAYER_ADJUST].m_flCycle == 0.0)
            {
                side = 2 * (math::angle_diff(animstate->m_flEyeYaw, animstate->m_flGoalFeetYaw) <= 0.0) - 1;
            }
        }
        else if (!(server_animlayers[ANIMATION_LAYER_LEAN].m_flWeight * 1000.0) && (server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0) == (previous_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0)) //the shit was 1000 iirc u can double check if u want
        {
            auto first_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_AIMMATRIX][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
            auto second_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_WEAPON_ACTION_RECROUCH][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
            auto third_delta = abs(server_animlayers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - resolver_animlayers[ANIMATION_LAYER_WEAPON_ACTION][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);

        if (first_delta < second_delta || third_delta <= second_delta || (second_delta * 1000.0))
        {
            if (first_delta >= third_delta && second_delta > third_delta && !(third_delta * 1000.0))
                {
                    side = 1;
                }
            }
            else
            {
                side = -1;
            }
        }
ластовый
это ресольвер вантапа по леерам о_о
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
И еще маленький вопросик, что делают эти строки?
это детект по леерам, если чел в стенде(велосити меньше 0.1) то идёт детект по 3-му лееру, если нет от берутся плейбекрейты 6 леера и сравниваются
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
Да у вас же из коробки есть имплементация трейса под антифристенды в ЛВ. Возьмите эту логику в ресольвере и перепишите правильно. Сам utils там правильный, сама логика ресольвера неправильная + антифристенд сам по себе неефективное решение для фикса десинков.
 
Похожие темы
Сверху Снизу