Real Silencer State (Like CS:GO)

Real Silencer State (Like CS:GO) 1.2.0

Нет прав для скачивания
Код:
#pragma semicolon 1

#include <amxmodx>
#include <hamsandwich>
#include <reapi>

new Float:usp_silencer_time[2];
new Float:m4a1_silencer_time[2];

public plugin_init()
{
    register_plugin("Real Silencer State (Like CS:GO)", "1.2.0", "fl0wer");

    new const silencerWeapons[][] = { "weapon_usp", "weapon_m4a1" };

    for (new i = 0; i < sizeof(silencerWeapons); i++)
    {
        RegisterHam(Ham_Item_Holster, silencerWeapons[i], "@CBasePlayerWeapon_Holster_Post", true);
        RegisterHam(Ham_Weapon_SecondaryAttack, silencerWeapons[i], "@CBasePlayerWeapon_SecondaryAttack_Post", true);
    }

    bind_pcvar_float(
        create_cvar(
            "usp_silencer_attach_time", "2.5", _,
            "USP silencer attach time. (Original: 3.13, Default: 2.5)",
            true, 0.0),
        usp_silencer_time[0]
    );
    bind_pcvar_float(
        create_cvar(
            "usp_silencer_detach_time", "2.0", _,
            "USP silencer detach time. (Original: 3.13, Default: 2.5)",
            true, 0.0
        ),
        usp_silencer_time[1]
    );
    bind_pcvar_float(
        create_cvar(
            "m4a1_silencer_attach_time", "1.4", _,
            "M4A1 silencer attach time. (Original: 2.0, Default: 1.4)",
            true, 0.0
        ),
        m4a1_silencer_time[0]
    );
    bind_pcvar_float(
        create_cvar(
            "m4a1_silencer_detach_time", "1.0", _,
            "M4A1 silencer detach time. (Original: 2.0, Default: 1.0)",
            true, 0.0
        ),
        m4a1_silencer_time[1]
    );
}

@CBasePlayerWeapon_Holster_Post(id)
{
    new player = get_member(id, m_pPlayer);

    if (get_member(player, m_bOwnsShield))
    {
        return;
    }

    new Float:silencerChangeTime = Float:get_member(id, m_Weapon_fBurstSpread);

    if (!silencerChangeTime)
    {
        return;
    }

    if (silencerChangeTime < get_gametime())
    {
        return;
    }

    new WeaponState:cancelWeaponState;

    switch (get_member(id, m_iId))
    {
        case WEAPON_USP:
        {
            cancelWeaponState = WPNSTATE_USP_SILENCED;
        }
        case WEAPON_M4A1:
        {
            cancelWeaponState = WPNSTATE_M4A1_SILENCED;
        }
        default:
        {
            return;
        }
    }

    set_member(id, m_Weapon_iWeaponState, get_member(id, m_Weapon_iWeaponState) ^ cancelWeaponState);
    set_member(id, m_Weapon_fBurstSpread, 0.0);
    set_member(id, m_Weapon_flNextPrimaryAttack, 0.0);
    set_member(id, m_Weapon_flNextSecondaryAttack, 0.0);
}

@CBasePlayerWeapon_SecondaryAttack_Post(id)
{
    new player = get_member(id, m_pPlayer);

    if (get_member(player, m_bOwnsShield))
    {
        return;
    }

    new WeaponState:weaponState = get_member(id, m_Weapon_iWeaponState);
    new Float:nextSilencerStateTime;

    switch (get_member(id, m_iId))
    {
        case WEAPON_USP:
        {
            nextSilencerStateTime = usp_silencer_time[weaponState ? 0 : 1];
        }
        case WEAPON_M4A1:
        {
            nextSilencerStateTime = m4a1_silencer_time[weaponState ? 0 : 1];
        }
        default:
        {
            return;
        }
    }

    set_member(id, m_Weapon_fBurstSpread, get_gametime() + nextSilencerStateTime);
}
Назад
Верх