Выпадающие Магазины От Оружия: различия между версиями
Перейти к навигации
Перейти к поиску
Slux (обсуждение | вклад) |
Slux (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
---- | ---- | ||
− | <source lang=cpp line | + | <source lang=cpp line> |
void SpawnClip( void ); | void SpawnClip( void ); | ||
</source> | </source> | ||
Строка 21: | Строка 21: | ||
---- | ---- | ||
− | <source lang=cpp line | + | <source lang=cpp line> |
lass CGlock : public CBasePlayerWeapon | lass CGlock : public CBasePlayerWeapon | ||
{ | { | ||
Строка 63: | Строка 63: | ||
---- | ---- | ||
− | <source lang=cpp line | + | <source lang=cpp line> |
void CGlock::Reload( void ) | void CGlock::Reload( void ) | ||
{ | { | ||
Строка 92: | Строка 92: | ||
---- | ---- | ||
− | <source lang=cpp line | + | <source lang=cpp line> |
void CGlock::SpawnClip( void ) | void CGlock::SpawnClip( void ) | ||
{ | { | ||
Строка 112: | Строка 112: | ||
---- | ---- | ||
− | <source lang=cpp line | + | <source lang=cpp line> |
void SpawnClip( void ); | void SpawnClip( void ); | ||
</source> | </source> |
Версия 21:16, 12 мая 2009
Выпадающие магазины от оружия
Доброго времени суток! Сегодня я расскажу как сделать, чтобы при перезарядке пустой магазин падал на пол самым простым способом. Рассмотрим мы этот тутор на примере глока=) Для начала откроем weapons.h, и добавим в class CGlock : public CBasePlayerWeapon строчку:
void SpawnClip( void );
Должно получиться что-то вроде этого:
lass 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