Silencer ( Анимация, Звуки, Модель )

Сообщения
1,549
Реакции
1,553
Помог
2 раз(а)
Небольшая наработка на глушак m4a1 и usp
Весь сырой результат на видео

Кто захочет взяться за продолжение банкета - пишите

Что сделано
Анима от 3го лица
Звук

Что нужно ещё сделать
p_ w_ субмодели - с глушаком и без
Давать игроку и ложить нужное на землю

По звуках ещё
Если одел глушак - один звук
Снял - другой звук
Но как и на v_ моделях оружия usp m4a1

Вот и всё собственно


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

#define MAX_PLAYERS            32

#define IsPlayer(%1)                (1 <= (%1) <= g_iMaxPlayers)
#define get_weapon_owner(%1)        get_pdata_cbase(%1, m_pPlayer, XO_WEAPON)
#define get_weapon_state(%1)        any:get_pdata_int(%1, m_fWeaponState, XO_WEAPON)

const m_iId = 43
const m_pPlayer = 41
const m_fWeaponState = 74
const XO_WEAPON = 4

enum WeaponState
{
    WPNSTATE_NULL             = 0,
    WPNSTATE_USP_SILENCER        = (1<<0),
    WPNSTATE_M4A1_SILENCER        = (1<<2)
}

new g_iMaxPlayers
new WeaponState:g_bWeaponState[MAX_PLAYERS +1][CSW_P90 + 1]

new const Player_Silencer_Anim[] = "ref_shoot_shotgun";

new const sound_silencer[][] =
{
    "weapons/usp_silencer_on.wav",
    "weapons/usp_silencer_off.wav",
    "weapons/m4a1_silencer_on.wav",
    "weapons/m4a1_silencer_off.wav"
}

public plugin_init()
{
    static const szWeaponList[][] =
    {
        "weapon_m4a1", "weapon_usp"
    }

    for(new i = 0; i < sizeof(szWeaponList); ++i)
    {
        RegisterHam(Ham_Weapon_SecondaryAttack, szWeaponList[i], "Weapon_SecondaryAttack_Post", .Post = true)
    }

    g_iMaxPlayers = get_maxplayers()
}

public plugin_precache()
{
    for(new i = 0; i < sizeof sound_silencer; i++)
        precache_sound(sound_silencer[i])
}

public Weapon_SecondaryAttack_Post(pWeapon)
{
    if(pWeapon <= 0)
        return HAM_IGNORED;

    new pPlayer = get_weapon_owner(pWeapon)

    if(IsPlayer(pPlayer))
    {
        set_player_animation(pPlayer, Player_Silencer_Anim)

        g_bWeaponState[pPlayer][get_weapon_id(pWeapon)] = get_weapon_state(pWeapon)

        // События звуков на глушитель ( одет / снят )
    }

    return HAM_IGNORED;
}

public Silencer_USP_On(pPlayer)
{
    emit_sound(pPlayer, CHAN_WEAPON, sound_silencer[0], 0.5, ATTN_STATIC, 0, PITCH_NORM)
}

public Silencer_USP_Off(pPlayer)
{
    emit_sound(pPlayer, CHAN_WEAPON, sound_silencer[1], 0.5, ATTN_STATIC, 0, PITCH_NORM)
}

public Silencer_M4A1_On(pPlayer)
{
    emit_sound(pPlayer, CHAN_WEAPON, sound_silencer[2], 0.5, ATTN_STATIC, 0, PITCH_NORM)
}

public Silencer_M4A1_Off(pPlayer)
{
    emit_sound(pPlayer, CHAN_WEAPON, sound_silencer[3], 0.5, ATTN_STATIC, 0, PITCH_NORM)
}

stock get_weapon_id(pWeapon)
{                                     
    new iId = get_pdata_int(pWeapon, m_iId, XO_WEAPON)
    return (CSW_P228 <= iId <= CSW_P90) ? iId : 0
}

stock set_player_animation(const pPlayer, const anim_name[])
{
    static anim_id, Float:flFrameRate, bool:bLoops, Float:flGroundSpeed;

    if ((anim_id = lookup_sequence(pPlayer, anim_name, flFrameRate, bLoops, flGroundSpeed)) == -1)
        anim_id = 0;

        new Float:flGameTime = get_gametime();
    
    set_pev(pPlayer, pev_frame, 0.0);
    set_pev(pPlayer, pev_framerate, 0.7);
    set_pev(pPlayer, pev_animtime, flGameTime );
    set_pev(pPlayer, pev_sequence, anim_id);
    
    set_pdata_int(pPlayer, 40, bLoops, 4);
    set_pdata_int(pPlayer, 39, 0, 4);

    set_pdata_float(pPlayer, 36, flFrameRate, 4);
    set_pdata_float(pPlayer, 37, flGroundSpeed, 4);
    set_pdata_float(pPlayer, 38, flGameTime , 4);

    set_pdata_int(pPlayer, 73, 28, 5);
    set_pdata_int(pPlayer, 74, 28, 5);   
    set_pdata_float(pPlayer, 220, flGameTime , 5);
}
 

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

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