Выпадающие Магазины От Оружия
Перейти к навигации
Перейти к поиску
Доброго времени суток! Сегодня я расскажу как сделать, чтобы при перезарядке пустой магазин падал на пол самым простым способом. Рассмотрим мы этот тутор на примере глока=) Для начала откроем weapons.h, и добавим в class CGlock : public CBasePlayerWeapon строчку:
void SpawnClip( void );
Должно получиться что-то вроде этого:
class CGlock : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 2; }
int GetItemInfo(ItemInfo *p);
void PrimaryAttack( void );
void SecondaryAttack( void );
void GlockFire( float flSpread, float flCycleTime, BOOL fUseAutoAim );
BOOL Deploy( void );
void Reload( void );
void SpawnClip( void );
void WeaponIdle( void );
virtual BOOL UseDecrement( void )
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}
private:
int m_iShell;
unsigned short m_usFireGlock1;
unsigned short m_usFireGlock2;
};
Далее идем в hl_wpn_glock.cpp и заменяем функцию void CGlock::Reload( void ) на это:
void CGlock::Reload( void )
{
if ( m_pPlayer->ammo_9mm <= 0 )
return;
int iResult;
if (m_iClip == 0)
iResult = DefaultReload( 17, GLOCK_RELOAD, 1.5 );
else
iResult = DefaultReload( 17, GLOCK_RELOAD_NOT_EMPTY, 1.5 );
if (iResult)
{
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
SetThink( SpawnClip );
pev->nextthink = gpGlobals->time + 0.8;//выставляем время задержки перед вызовом спавна(ставьте подходящее вам значение)
}
}
Теперь пишем саму функцию спавна магазина, вставим ее ниже предыдущей функции:
void CGlock::SpawnClip( void )
{
int m_iClip9mm;
m_iClip9mm = PRECACHE_MODEL ("models/w_9mmclip.mdl");// ставим модель магазина.
UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecClipVelocity = m_pPlayer->pev->velocity
+ gpGlobals->v_right * RANDOM_FLOAT(0,5)
+ gpGlobals->v_up * RANDOM_FLOAT(-10,-15)
+ gpGlobals->v_forward * 1;
EjectBrass ( pev->origin + gpGlobals->v_up * -4 + gpGlobals->v_forward * 1, vecClipVelocity, pev->angles.y, m_iClip9mm, TE_BOUNCE_NULL);//собственно вместо TE_BOUNCE_NULL можете выставить звук любого материала, а потом заменить его...(если хотите чтобы магазин издавал звук при падении).
}
Вроде ничего не забыл. Теперь по аналогии вы можете добавить эту "фишку" любой пушке). Главное не забывайте добавлять в weapons.h в класс class CИмяПушки : public CBasePlayerWeapon строчку:
void SpawnClip( void );
Автор: PoD-Stas Дата: 12.05.09