Моделлер
Участник
Пользователь
- Сообщения
- 1,549
- Реакции
- 1,553
- Помог
- 2 раз(а)
Небольшая наработка на глушак m4a1 и usp
Весь сырой результат на видео
Кто захочет взяться за продолжение банкета - пишите
Что сделано
Анима от 3го лица
Звук
Что нужно ещё сделать
p_ w_ субмодели - с глушаком и без
Давать игроку и ложить нужное на землю
По звуках ещё
Если одел глушак - один звук
Снял - другой звук
Но как и на v_ моделях оружия usp m4a1
Вот и всё собственно
Весь сырой результат на видео
Кто захочет взяться за продолжение банкета - пишите
Что сделано
Анима от 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);
}