Выпадающие Магазины От Оружия: различия между версиями
Перейти к навигации
Перейти к поиску
VA5I1 (обсуждение | вклад) (Создана новая страница размером Категория:Программирование_GoldSrc = Выпадающие магазины от оружия = Доброг...) |
Slux (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
Рассмотрим мы этот тутор на примере глока=) | Рассмотрим мы этот тутор на примере глока=) | ||
Для начала откроем weapons.h, и добавим в class CGlock : public CBasePlayerWeapon строчку: | Для начала откроем weapons.h, и добавим в class CGlock : public CBasePlayerWeapon строчку: | ||
+ | |||
+ | |||
+ | ---- | ||
<source lang=cpp> | <source lang=cpp> | ||
void SpawnClip( void ); | void SpawnClip( void ); | ||
</source> | </source> | ||
+ | |||
+ | ---- | ||
+ | |||
Должно получиться что-то вроде этого: | Должно получиться что-то вроде этого: | ||
+ | |||
+ | ---- | ||
<source lang=cpp> | <source lang=cpp> | ||
Строка 47: | Строка 55: | ||
}; | }; | ||
</source> | </source> | ||
+ | |||
+ | ---- | ||
+ | |||
Далее идем в hl_wpn_glock.cpp и заменяем функцию void CGlock::Reload( void ) на это: | Далее идем в hl_wpn_glock.cpp и заменяем функцию void CGlock::Reload( void ) на это: | ||
+ | |||
+ | ---- | ||
<source lang=cpp> | <source lang=cpp> | ||
Строка 71: | Строка 84: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | ---- | ||
+ | |||
Теперь пишем саму функцию спавна магазина, вставим ее ниже предыдущей функции: | Теперь пишем саму функцию спавна магазина, вставим ее ниже предыдущей функции: | ||
+ | |||
+ | ---- | ||
<source lang=cpp> | <source lang=cpp> | ||
Строка 87: | Строка 105: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | ---- | ||
+ | |||
Вроде ничего не забыл. Теперь по аналогии вы можете добавить эту "фишку" любой пушке). Главное не забывайте добавлять в weapons.h в класс class CИмяПушки : public CBasePlayerWeapon строчку: | Вроде ничего не забыл. Теперь по аналогии вы можете добавить эту "фишку" любой пушке). Главное не забывайте добавлять в weapons.h в класс class CИмяПушки : public CBasePlayerWeapon строчку: | ||
+ | |||
+ | ---- | ||
<source lang=cpp> | <source lang=cpp> | ||
void SpawnClip( void ); | void SpawnClip( void ); | ||
</source> | </source> | ||
+ | |||
+ | ---- |
Версия 19:19, 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 );