Скорость доставания пушки

Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Комментарии от s1lent

По-поводу этого, странно, только у дигла не вызывается idle анимация, скорее всего valve пропустил код
У всех оружий есть вызов idle анимации поэтому деплой не сбивается
Суть в том, что плагином указываешь m_Weapon_flTimeWeaponIdle как только это время пройдет,
должна вызвать анимация idle оружия она и перебивает анимацию деплоя, у дигла ее просто нет и перебивать нечем

Ну логика ошибки просачивается, у дигла есть анимация idle, но она никогда не вызывается
если будет кастомная модель на дигл, где допустим на idle анимации будет осмотр оружия
то это получается никогда работать не будет idle анимация проигрывается каждые 20 секунд, в зависимости от типа оружия
у deagle этого нет
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Итоговый код с фиксом дигла, ну как смог

C++:
#define IDLE 0
#define NULL_VALUE 0

public plugin_init( )
{
    RegisterHookChain( RG_CBasePlayerWeapon_DefaultDeploy, "hook_weapon_deploy_post", .post = true );
    DisableHamForward( g_hWeaponIdlePre = RegisterHam( Ham_Weapon_WeaponIdle, "weapon_deagle", "hook_weapon_idle_pre", .Post = false ) );
}

public hook_weapon_deploy_post( const ent )
{
    new weaponidx = get_weaponidx( ent );
    
    if( is_custom_weapon( weaponidx ) )
    {
        get_weapon_data( g_aWeapons, weaponidx, g_eWeaponData );
        
        new user = get_member( ent, m_pPlayer );
        
        set_member( user, m_flNextAttack, g_eWeaponData[ W_DEPLOY_TIME ] );
        set_member( ent, m_Weapon_flTimeWeaponIdle, g_eWeaponData[ W_DEPLOY_TIME ] );
        set_member( ent, m_Weapon_flNextPrimaryAttack, g_eWeaponData[ W_DEPLOY_TIME ] );
        set_member( ent, m_Weapon_flNextSecondaryAttack, g_eWeaponData[ W_DEPLOY_TIME ] );
        
        if( get_member( ent, m_iId ) == WEAPON_DEAGLE )
        {
            EnableHamForward( g_hWeaponIdlePre );
        }
        
        SetHookChainReturn( ATYPE_INTEGER, false );
    }
}

public hook_weapon_idle_pre( const ent )
{
    if( get_member( ent, m_Weapon_flTimeWeaponIdle ) <= NULL_VALUE.0 )
    {
        new user = get_member( ent, m_pPlayer );
        
        send_weapon_amimation( user, IDLE );
        
        DisableHamForward( g_hWeaponIdlePre );
    }
}

send_weapon_amimation( const user, const anim )
{
    set_entvar( user, var_weaponanim, anim );
    
    message_begin( MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = user );
    write_byte( anim );
    write_byte( get_entvar( user, var_body ) );
    message_end( );
}
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Дополнительный комментарии от сайлента
похоже анимация idle в дигле багнутая
наверное поэтому и убрали ее, им видимо было лень фиксить саму анимацию
после деплоя, спустя 5 секунд включается idle и позиция дигла смещается
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу