Вопрос Траблы со кнайф ченджером

Пользователь
Статус
Оффлайн
Регистрация
12 Июн 2019
Сообщения
865
Реакции[?]
127
Поинты[?]
1K
Вкратце: функция скинченджера ничего не меняет
C++:
        ImGui::Combo(XorStr("knife##skins"), &C::Get<int>(Vars.iKnifeModel), XorStr("Default\0Bayonet\0Flip knife\0Gut knife\0\0"));
        static int iPrevKnife = 0;
        if (iPrevKnife != C::Get<int>(Vars.iKnifeModel))//чтобы лишний раз не нагружать
        {
            iPrevKnife = C::Get<int>(Vars.iKnifeModel);
            //CSkinChanger::Run()
            skinchanger.Run();//вызов скинчейджера
            
            U::ForceFullUpdate();//обновляем
        }
ну и сам скинченжэер
C++:
void CSkinChanger::Run()
{
    CBaseEntity* pLocal = CBaseEntity::GetLocalPlayer();

    if (pLocal == nullptr || !pLocal->IsAlive())
        return;
    //RunGlove();

    CBaseCombatWeapon* pActiveWeapon = pLocal->GetWeapon();
    if (!pActiveWeapon)
        return;

    PlayerInfo_t playerInfo;
    I::Engine->GetPlayerInfo(I::Engine->GetLocalPlayer(), &playerInfo);

    static int iKnifeModel = C::Get<int>(Vars.iKnifeModel);
    if (iKnifeModel != C::Get<int>(Vars.iKnifeModel))
        iKnifeModel = C::Get<int>(Vars.iKnifeModel);

    CBaseHandle* pMyWeapons = pLocal->GetWeaponsHandle();
    for (unsigned int i = 0; pMyWeapons[i] != INVALID_EHANDLE_INDEX; i++) {
        CBaseCombatWeapon* pWeapon = (CBaseCombatWeapon*)I::ClientEntityList->GetClientEntityFromHandle(pMyWeapons[i]);
        if (pWeapon)
        {
            // Filter out weapons that aren't our own.
            if (pWeapon->GetOwnerXuidLow() != playerInfo.nXuidLow)
                continue;

            // Change knife model.
            if (pActiveWeapon->GetClientClass()->nClassID == EClassIndex::CKnife && iKnifeModel > 0)
                ApplyKnifeModel(pWeapon, knifelist.at(iKnifeModel).szModel);

            // Apply knife skin.
            //if (pWeapon->GetClientClass()->nClassID == EClassIndex::CKnife && iKnifeModel > 0)
            //    ApplyKnifeSkin(pWeapon, weapon_info[iKnifeModel - 1].model, weapon_info[iKnifeModel - 1].id, 0, 3, 0.0001f);

            // We really shouldn't do this, but whatever.
            // Loop thru all possible weapons and set their skins.
            /*for (auto j = 0; j < 60; j++)
            {
                if (pWeapon->GetItemDefinitionIndex() == vecWeapons[j] && j < 53)
                {
                    pWeapon->GetFallbackPaintKit() = atoi(C::Get<std::deque<std::string>>(Vars.vecSkinIDs).at(*pWeapon->GetItemDefinitionIndex()).c_str());
                    pWeapon->GetFallbackWear() = C::Get<std::deque<float>>(Vars.vecSkinWear).at(*pWeapon->GetItemDefinitionIndex());
                    pWeapon->GetFallbackSeed() = C::Get<std::deque<int>>(Vars.vecSkinSeed).at(*pWeapon->GetItemDefinitionIndex());
                }
            }

            // Force fallback values.
            pWeapon->GetItemIDHigh() = -1;

            // Fix stat-trak.
            pWeapon->GetAccountID() = playerInfo.nXuidLow;
            //pWeapon->GetOwnerXuidHigh() = 0;
            //pWeapon->GetOwnerXuidLow() = 0;*/
        }
    }

}
bool CSkinChanger::ApplyKnifeModel(CBaseCombatWeapon* pWeapon, const char* szModel)
{

    CBaseViewModel* pViewmodel = (CBaseViewModel*)I::ClientEntityList->GetClientEntityFromHandle(CBaseEntity::GetLocalPlayer()->GetViewModelHandle());
    if (!pViewmodel)
        return false;

    CBaseHandle pWeaponHandle = pViewmodel->GetWeaponHandle();
    if (!pWeaponHandle)
        return false;

    CBaseCombatWeapon* pViewmodelWeapon = (CBaseCombatWeapon*)(I::ClientEntityList->GetClientEntityFromHandle(pWeaponHandle));
    if (pViewmodelWeapon != pWeapon)
        return false;

    pViewmodel->GetModelIndex() = I::ModelInfo->GetModelIndex(szModel);

    return true;
}
Спасибо кто откликнулся!
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,596
Реакции[?]
879
Поинты[?]
113K
Вкратце: функция скинченджера ничего не меняет
C++:
        ImGui::Combo(XorStr("knife##skins"), &C::Get<int>(Vars.iKnifeModel), XorStr("Default\0Bayonet\0Flip knife\0Gut knife\0\0"));
        static int iPrevKnife = 0;
        if (iPrevKnife != C::Get<int>(Vars.iKnifeModel))//чтобы лишний раз не нагружать
        {
            iPrevKnife = C::Get<int>(Vars.iKnifeModel);
            //CSkinChanger::Run()
            skinchanger.Run();//вызов скинчейджера
           
            U::ForceFullUpdate();//обновляем
        }
ну и сам скинченжэер
C++:
void CSkinChanger::Run()
{
    CBaseEntity* pLocal = CBaseEntity::GetLocalPlayer();

    if (pLocal == nullptr || !pLocal->IsAlive())
        return;
    //RunGlove();

    CBaseCombatWeapon* pActiveWeapon = pLocal->GetWeapon();
    if (!pActiveWeapon)
        return;

    PlayerInfo_t playerInfo;
    I::Engine->GetPlayerInfo(I::Engine->GetLocalPlayer(), &playerInfo);

    static int iKnifeModel = C::Get<int>(Vars.iKnifeModel);
    if (iKnifeModel != C::Get<int>(Vars.iKnifeModel))
        iKnifeModel = C::Get<int>(Vars.iKnifeModel);

    CBaseHandle* pMyWeapons = pLocal->GetWeaponsHandle();
    for (unsigned int i = 0; pMyWeapons[i] != INVALID_EHANDLE_INDEX; i++) {
        CBaseCombatWeapon* pWeapon = (CBaseCombatWeapon*)I::ClientEntityList->GetClientEntityFromHandle(pMyWeapons[i]);
        if (pWeapon)
        {
            // Filter out weapons that aren't our own.
            if (pWeapon->GetOwnerXuidLow() != playerInfo.nXuidLow)
                continue;

            // Change knife model.
            if (pActiveWeapon->GetClientClass()->nClassID == EClassIndex::CKnife && iKnifeModel > 0)
                ApplyKnifeModel(pWeapon, knifelist.at(iKnifeModel).szModel);

            // Apply knife skin.
            //if (pWeapon->GetClientClass()->nClassID == EClassIndex::CKnife && iKnifeModel > 0)
            //    ApplyKnifeSkin(pWeapon, weapon_info[iKnifeModel - 1].model, weapon_info[iKnifeModel - 1].id, 0, 3, 0.0001f);

            // We really shouldn't do this, but whatever.
            // Loop thru all possible weapons and set their skins.
            /*for (auto j = 0; j < 60; j++)
            {
                if (pWeapon->GetItemDefinitionIndex() == vecWeapons[j] && j < 53)
                {
                    pWeapon->GetFallbackPaintKit() = atoi(C::Get<std::deque<std::string>>(Vars.vecSkinIDs).at(*pWeapon->GetItemDefinitionIndex()).c_str());
                    pWeapon->GetFallbackWear() = C::Get<std::deque<float>>(Vars.vecSkinWear).at(*pWeapon->GetItemDefinitionIndex());
                    pWeapon->GetFallbackSeed() = C::Get<std::deque<int>>(Vars.vecSkinSeed).at(*pWeapon->GetItemDefinitionIndex());
                }
            }

            // Force fallback values.
            pWeapon->GetItemIDHigh() = -1;

            // Fix stat-trak.
            pWeapon->GetAccountID() = playerInfo.nXuidLow;
            //pWeapon->GetOwnerXuidHigh() = 0;
            //pWeapon->GetOwnerXuidLow() = 0;*/
        }
    }

}
bool CSkinChanger::ApplyKnifeModel(CBaseCombatWeapon* pWeapon, const char* szModel)
{

    CBaseViewModel* pViewmodel = (CBaseViewModel*)I::ClientEntityList->GetClientEntityFromHandle(CBaseEntity::GetLocalPlayer()->GetViewModelHandle());
    if (!pViewmodel)
        return false;

    CBaseHandle pWeaponHandle = pViewmodel->GetWeaponHandle();
    if (!pWeaponHandle)
        return false;

    CBaseCombatWeapon* pViewmodelWeapon = (CBaseCombatWeapon*)(I::ClientEntityList->GetClientEntityFromHandle(pWeaponHandle));
    if (pViewmodelWeapon != pWeapon)
        return false;

    pViewmodel->GetModelIndex() = I::ModelInfo->GetModelIndex(szModel);

    return true;
}
Спасибо кто откликнулся!
скин ченджер вызывается в фсн, а не в презент хуке...
 
Участник
Статус
Оффлайн
Регистрация
16 Дек 2018
Сообщения
990
Реакции[?]
177
Поинты[?]
17K
Просто из любопытства спрошу почему функция:
void CSkinChanger::Run()
А вызываешь ты:
skinchanger.Run();//вызов скинчейджера
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,596
Реакции[?]
879
Поинты[?]
113K
Забаненный
Статус
Оффлайн
Регистрация
22 Мар 2021
Сообщения
1,019
Реакции[?]
315
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу