Вопрос Opposite Knife Hand

хочу кекать!
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
148
Реакции[?]
-42
Поинты[?]
2K
cl_righthand постоянно меняется, вместо того чтобы быть статичным. (не знаю как правильно объяснить, так-что смортите видео)
C++:
void misc::left_hand_knife(ClientFrameStage_t stage) noexcept
{
    if (stage != ClientFrameStage_t::FRAME_RENDER_START && stage != ClientFrameStage_t::FRAME_RENDER_END)
        return;

    const static auto cl_righthand = m_cvar()->FindVar(crypt_str("cl_righthand"));

    const auto weapon_knife = g_ctx.globals.weapon->is_knife();

    static bool var;

    if (!g_cfg.misc.lefthand)
    {
        cl_righthand->SetValue(var);
    }
    else if (stage == ClientFrameStage_t::FRAME_RENDER_START)
    {
        var = cl_righthand->GetInt();

        if (weapon_knife)
        {
            cl_righthand->SetValue(!var);
        }
    }
    else
    {
        cl_righthand->SetValue(var);
    }
}
 
ok
Начинающий
Статус
Оффлайн
Регистрация
18 Фев 2020
Сообщения
132
Реакции[?]
20
Поинты[?]
0
cl_righthand->SetValue(!var);
ладно...
а что бы камаз опять меня не разъехал то у тебя каждый раз меняется значение (тоесть было 1 стало 0 стало 1 и тп тоесть цикл) может я что то неправильно написал тогда поправьте меня
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
cl_righthand постоянно меняется, вместо того чтобы быть статичным. (не знаю как правильно объяснить, так-что смортите видео)
C++:
void misc::left_hand_knife(ClientFrameStage_t stage) noexcept
{
    if (stage != ClientFrameStage_t::FRAME_RENDER_START && stage != ClientFrameStage_t::FRAME_RENDER_END)
        return;

    const static auto cl_righthand = m_cvar()->FindVar(crypt_str("cl_righthand"));

    const auto weapon_knife = g_ctx.globals.weapon->is_knife();

    static bool var;

    if (!g_cfg.misc.lefthand)
    {
        cl_righthand->SetValue(var);
    }
    else if (stage == ClientFrameStage_t::FRAME_RENDER_START)
    {
        var = cl_righthand->GetInt();

        if (weapon_knife)
        {
            cl_righthand->SetValue(!var);
        }
    }
    else
    {
        cl_righthand->SetValue(var);
    }
}
C++:
void c_misc::opposite_hand_knife(FrameStage stage) noexcept
{
    if (!vars.misc.opp_knife_hand)
        return;

    if (!m_local())
        return;

    if (stage != RENDER_START && stage != RENDER_END)
        return;

    static const auto cl_righthand = m_cvar()->findVar("cl_righthand");
    static bool original;

    if (stage == FrameStage::RENDER_START) {
        original = cl_righthand->getInt();

        if (const auto activeWeapon = m_local()->activeweapon()) {
            if (const auto classId = activeWeapon->getClientClass()->ClassId; classId == ClassId::Knife || classId == ClassId::KnifeGG)
                cl_righthand->setValue(!original);
        }
    } else {
        cl_righthand->setValue(original);
    }
}
 
хочу кекать!
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
148
Реакции[?]
-42
Поинты[?]
2K
C++:
void c_misc::opposite_hand_knife(FrameStage stage) noexcept
{
    if (!vars.misc.opp_knife_hand)
        return;

    if (!m_local())
        return;

    if (stage != RENDER_START && stage != RENDER_END)
        return;

    static const auto cl_righthand = m_cvar()->findVar("cl_righthand");
    static bool original;

    if (stage == FrameStage::RENDER_START) {
        original = cl_righthand->getInt();

        if (const auto activeWeapon = m_local()->activeweapon()) {
            if (const auto classId = activeWeapon->getClientClass()->ClassId; classId == ClassId::Knife || classId == ClassId::KnifeGG)
                cl_righthand->setValue(!original);
        }
    } else {
        cl_righthand->setValue(original);
    }
}
чем этот код отличается от моего?
 
хочу кекать!
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
148
Реакции[?]
-42
Поинты[?]
2K
вместо SetValue(var) делай SetValue(1) или 0 тогда не будет постоянно меняться
мне не это нужно. мне нужно чтобы он зависел от выставленной квары. именно OPPOSITE Knife Hand, а не Left Knife Hand
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
мне не это нужно. мне нужно чтобы он зависел от выставленной квары. именно OPPOSITE Knife Hand, а не Left Knife Hand
С виду все нормально, бросается в глаза только GetInt вместо GetBool и static var без инициализации.
Но выглядит будто FRAME_RENDER_END никогда не приходит в эту функцию, поэтому ты просто инвертируешь cl_righthand каждый раз в FRAME_RENDER_START, поставь бряк на else и проверь что оно восстанавливается в конце кадра.
 
хочу кекать!
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
148
Реакции[?]
-42
Поинты[?]
2K
Последнее редактирование:
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
да, я знаю, я клоун
Нет нет, имею ввиду брекпоинт (точку останова), жмакаешь левее номера строки, появится красный круг такой, это означает что во время отладки если код будет выполняться в этом месте выполнение программы прервется и студия подаст тебе сигнал и покажет весь контекст.
В твоем же случае, если туда не доходит управление то это и есть причина рандомной смены стороны, а если все срабатывает, значит нужно просто поотлаживать и посмотреть как значение меняется из кадра в кадр, т.к. по задумке оно должно считываться в начале кадра, заменяться на время отрисовки и возвращаться назад.
 
Сверху Снизу