Переключить оружие после броска гранаты

Сообщения
1,032
Реакции
828
Помог
10 раз(а)
У игрока имеется 3 HE, после броска первой гранаты, в руках висит вторая, а надо что бы висел PRIMARY_WEAPON_SLOT или PISTOL_SLOT например, что является действием по умолчанию, когда в запасе 1 граната.

Первый способ, ловлю бросок гранаты, после задержки ловлю Ent оружеек в запасе и переключаю

C++:
public hook_CBasePlayerThrowGrenade( const id )
{
    set_task_ex( TASK_DELAY__SWITCH_WEAPONS, "task_ForceSwitchWeapons", id, .flags = SetTask_Once );
}

public task_ForceSwitchWeapons( id )
{
    if( !is_user_alive( id ) )
    {
        return PLUGIN_CONTINUE;
    }
   
    new iWeaponEnt = get_member( id, m_rgpPlayerItems, PRIMARY_WEAPON_SLOT );
   
    if( !is_entity( iWeaponEnt ) )
    {
        iWeaponEnt = get_member( id, m_rgpPlayerItems, PISTOL_SLOT );
       
        if( !is_entity( iWeaponEnt ) )
        {
            iWeaponEnt = get_member( id, m_rgpPlayerItems, KNIFE_SLOT );
           
            if( !is_entity( iWeaponEnt ) )
            {
                return PLUGIN_CONTINUE;
            }
        }
    }
   
    rg_switch_weapon( id, iWeaponEnt );
   
    return PLUGIN_CONTINUE;
}
Второй способ
C++:
public hook_CBasePlayerThrowGrenade( const id, const iGrenadeEnt )
{
    new aData[ 1 ]; aData[ 0 ] = iGrenadeEnt;
   
    set_task_ex( TASK_DELAY__SWITCH_WEAPONS, "task_ForceSwitchWeapons", id, aData, sizeof( aData ), .flags = SetTask_Once );
}

public task_ForceSwitchWeapons( aData[ ], id )
{
    if( !is_user_alive( id ) )
    {
        return PLUGIN_CONTINUE;
    }
   
    ExecuteHamB( Ham_Weapon_RetireWeapon, aData[ 0 ] );
   
    return PLUGIN_CONTINUE;
}
В данном случае Ham сам переключает на следующие сильное оружие, но вопрос вот в чем, в ExecuteHamB( Ham_Weapon_RetireWeapon, aData[ 0 ] ); нету индекса игрока, кому переключать, не будет проблем что левым игрока переключит? )
17 Мар 2020
Хотя первый способ можно было наверно еще подправить, rg_switch_weapon вернет ведь ноль, если не удалось переключить
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Javekson, примерно так

Код:
#include <amxmodx>
#include <hamsandwich>
#include <reapi>

public plugin_init() {
    RegisterHam(Ham_Weapon_WeaponIdle, "weapon_hegrenade", "Weapon_WeaponIdle_Pre", false);
}

public Weapon_WeaponIdle_Pre(const item) {
    if (
        Float:get_member(item, m_Weapon_flTimeWeaponIdle) > 0.0
        || Float:get_member(item, m_flStartThrow) > 0.0
        || Float:get_member(item, m_flReleaseThrow) < 0.0
    ) {
        return HAM_IGNORED;
    }

    set_member(item, m_flStartThrow, 0.0);
    ExecuteHamB(Ham_Weapon_RetireWeapon, item);
    return HAM_SUPERCEDE;
}
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
fantom, сюда не рентабельно будет сделать проверку на вип? )
 

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

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