C++ Исходник Рофло-детект свитча сайда на мувах по анимкам

Забаненный
Статус
Оффлайн
Регистрация
24 Июл 2020
Сообщения
145
Реакции[?]
143
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Делалось по пьяне с друзьями
Работает через раз и держится на соплях
Но если вы не долбаеб, можете додумать все это
Дебажили по таким приколам (график)
1619949900938.png
Код:
static int last_side = 0;

    // predict enemy side by freestanding
    anti_freestanding(last_side);

    // enemy have high speed
    // we can predict his real angle (maybe)

    const auto& layer = player->get_animlayers()[12];
    if (layer.m_flWeight < 0.0003f)
    {
        if (layer.m_flWeight >= 0.00014f)
        {
            float torso_yaw = abs(animstate->m_flCurrentTorsoYaw);
            float lean = abs(animstate->m_flUnknownVelocityLean);

            static float old_torso = 0.f;
            static float old_lean = 0.f;

            // lean and torso is decreasing, side should be left?
            if (old_torso > torso_yaw && old_lean > lean)
                last_side = -1;
            // lean and torso is increasing, side should be right?
            else if (old_torso < torso_yaw && old_lean < lean)
                last_side = 1;
            else
            {
                // inverse last freestand side
                if (last_side == 1) last_side = -1;
                else if (last_side == -1) last_side = 1;
            }

            old_torso = torso_yaw;
            old_lean = lean;
        }
    }

    player_record->resolver_side = last_side;
 
Забаненный
Статус
Оффлайн
Регистрация
16 Фев 2018
Сообщения
67
Реакции[?]
57
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Делалось по пьяне с друзьями
Работает через раз и держится на соплях
Но если вы не долбаеб, можете додумать все это
Дебажили по таким приколам (график)
Посмотреть вложение 146594
Код:
static int last_side = 0;

    // predict enemy side by freestanding
    anti_freestanding(last_side);

    // enemy have high speed
    // we can predict his real angle (maybe)

    const auto& layer = player->get_animlayers()[12];
    if (layer.m_flWeight < 0.0003f)
    {
        if (layer.m_flWeight >= 0.00014f)
        {
            float torso_yaw = abs(animstate->m_flCurrentTorsoYaw);
            float lean = abs(animstate->m_flUnknownVelocityLean);

            static float old_torso = 0.f;
            static float old_lean = 0.f;

            // lean and torso is decreasing, side should be left?
            if (old_torso > torso_yaw && old_lean > lean)
                last_side = -1;
            // lean and torso is increasing, side should be right?
            else if (old_torso < torso_yaw && old_lean < lean)
                last_side = 1;
            else
            {
                // inverse last freestand side
                if (last_side == 1) last_side = -1;
                else if (last_side == -1) last_side = 1;
            }

            old_torso = torso_yaw;
            old_lean = lean;
        }
    }

    player_record->resolver_side = last_side;
Обновление значений в L12 получается заметить только в крайне тепличных условиях: максимальная скорость(~скар в руках и выше) и прямолинейное движение.
Иначе же, среди шума, отфильтровать нужные скачки значения будет очень сложно. - Ну мы не смогли, так-как на фоне простого криволинейного движения/изменения скорости, они очень маленькие.
1619950134089.png
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
1) зачем хардкодить проверки на конкретные значения?
2) если это реально работает, мб лучше переделать так, что б смотреть каждый раз дельту Олд и текущего значения. Ловить резкие скачки ( то бишь, отсеивать шум )?

Например, делаем список рекордов последних 64 например.
Каждый раз туда записываем дельту Олд и текущего значений.

Каждый раз итерируем наш список ( проходимся по нему ) и прибавляем дельту. Получаем сумму дельт. После чего эту сумму делим на количество наших записей листа. Тем самым получаем среднее арифметическое нашего "шума", включая скачки и вероятный смен сайда.

Теперь мы опять итерируем, но уже смотрим, где дельты больше чем среднее арифметическое - это и есть наш найболее вероятный смен сайда, так как все ДО среднего значения - это шум.

3) Что б это как то работало, нужно заранее знать верный угол. Так как сама по себе детекция смены сайда не сделает погоды, если это сработает на изначально неправильный выбранный нами сайд. Так что годится только как дополнение к уже существующему ресольверу.
Обновление значений в L12 получается заметить только в крайне тепличных условиях: максимальная скорость(~скар в руках и выше) и прямолинейное движение.
Иначе же, среди шума, отфильтровать нужные скачки значения будет очень сложно. - Ну мы не смогли, так-как на фоне простого криволинейного движения/изменения скорости, они очень маленькие.
Посмотреть вложение 146597
Не удивлюсь, если все это из, за хардкодед проверок Аля
if (layer.m_flWeight >= 0.00014f)

Где такая уверенность, что вейт не может быть ниже? Как раз таки может и ниже быть.
 
main public enemy
Эксперт
Статус
Оффлайн
Регистрация
30 Ноя 2019
Сообщения
1,531
Реакции[?]
647
Поинты[?]
0
1) зачем хардкодить проверки на конкретные значения?
2) если это реально работает, мб лучше переделать так, что б смотреть каждый раз дельту Олд и текущего значения. Ловить резкие скачки ( то бишь, отсеивать шум )?

Например, делаем список рекордов последних 64 например.
Каждый раз туда записываем дельту Олд и текущего значений.

Каждый раз итерируем наш список ( проходимся по нему ) и прибавляем дельту. Получаем сумму дельт. После чего эту сумму делим на количество наших записей листа. Тем самым получаем среднее арифметическое нашего "шума", включая скачки и вероятный смен сайда.

Теперь мы опять итерируем, но уже смотрим, где дельты больше чем среднее арифметическое - это и есть наш найболее вероятный смен сайда, так как все ДО среднего значения - это шум.

3) Что б это как то работало, нужно заранее знать верный угол. Так как сама по себе детекция смены сайда не сделает погоды, если это сработает на изначально неправильный выбранный нами сайд. Так что годится только как дополнение к уже существующему ресольверу.
1) Ну много читов ( покрайней мере раньше ) хардкодили , и делали проверки на конкретные значения или чувствительности так скажем.
2) Тут согласен.
3) Зачем последних 64? лучше будет по сайзу это сделать, и опять таки с чувствительностью поиграть можно что бы отсеять этот "шум"
Обновление значений в L12 получается заметить только в крайне тепличных условиях: максимальная скорость(~скар в руках и выше) и прямолинейное движение.
Иначе же, среди шума, отфильтровать нужные скачки значения будет очень сложно. - Ну мы не смогли, так-как на фоне простого криволинейного движения/изменения скорости, они очень маленькие.
Посмотреть вложение 146597
Давай схардкодим и сделаем проверку на эти тепличные условия.
Тоесть на скар в руках , скорость и прямолинейное движение :bayan::bayan:
 
Сверху Снизу