Sidebar

[HL] Выпадающие Магазины

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=/forums/pomosch.12/]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

PoD-Stas

Lolwhat? 0.o
VIP
29.04.2007
3 497
33
Туториал - Выпадающие Магазины

Доброго времени суток! Сегодня я расскажу как сделать, чтобы при перезарядке пустой магазин падал на пол самым простым способом.
Рассмотрим мы этот тутор на примере глока=)
Для начала откроем 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.cpp найти строку
Код:
WRITE_BYTE ( 25 );
, где число 25 - означает время жизни - 2.5 секунды, следовательно, 150 - 15 секунд жизни.

Вроде ничего не забыл. Теперь по аналогии вы можете добавить эту "фишку" любой пушке). Главное не забывайте добавлять в weapons.hв класс class CИмяПушки : public CBasePlayerWeapon строчку:
Код:
void SpawnClip( void );
Желаю удачи)
 
Последнее редактирование:
  • Like
Reactions: Aynekko

PoD-Stas

Lolwhat? 0.o
VIP
29.04.2007
3 497
33
Внимательно камменты почитайте, и вот еще что векторы там указывают куда, как выкидывать) насчет звука - TE_BOUNCE_* - вшит в движек и поменять звуки из этйо категории можн опросто заменив стандартные(напрнимер заменив звуки гильз) или же можно написать просто проигрывание через:
EMIT_SOUND_DYN(ENT(pev), CHAN_VOICE, "вашзвук.wav", 1, ATTN_NORM, 1, pitch);
только не забудьте его прокеширвоать, но в этом случае звук будет воспроизведен только раз, когад магазин только выпадет... и при последующих его "Падениях" он не будет проигрываться...

Подумав, добавил:

В планах написать вторую часть по кастомным звукам :agy:
 
Последнее редактирование:

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
2 PoD-Stas:
молодец! держи +! щас рассмотрю внемательно твой код и может придумаю еще что-нибудь. Еще можно попробывать сделать что-бы если она на наколонную поверхность падала не проходила сквозь поверхности, а ложилась на поверхность как должна.
 
Последнее редактирование:

PoD-Stas

Lolwhat? 0.o
VIP
29.04.2007
3 497
33
Вообще то у нее есть физика=) Чтож, я думаю можно будет написать вторую часть.)
 
Последнее редактирование:

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
2 PoD-Stas:
да знаю я что есть у нее физика =)
Ага =)
со стенсильными тенями которыми я сейчас сделал ваще клево смотриться =)
 

PoD-Stas

Lolwhat? 0.o
VIP
29.04.2007
3 497
33
короче нужно создавать цулую энтитю, задавать параметры при которых она принимает положение, относительно поверхности... а потом удалять ее через время -UTIL_Remove.
Преимущества:
+Гибкость настройки
+Реалистичную физику можн оанписать
+Выставить любые звуки
Минус:
-Многа кода
-Лишняя энтитя...=/ для каждого оружия
 

PHombie

Зерги не перелетают
21.08.2006
4 278
35
5
0
Киев
2 PoD-Stas:
Оффтоп
 

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
PoD-Stas сказал(а):
короче нужно создавать цулую энтитю, задавать параметры при которых она принимает положение, относительно поверхности... а потом удалять ее через время -UTIL_Remove.
Преимущества:
+Гибкость настройки
+Реалистичную физику можн оанписать
+Выставить любые звуки
Минус:
-Многа кода
-Лишняя энтитя...=/ для каждого оружия
хоть и минусы есть, но всеравно меня физика заинтересовала =)
напиши ка что ты там надумал =)
 

PoD-Stas

Lolwhat? 0.o
VIP
29.04.2007
3 497
33
Короче. Можно помозговать, и от второго минуса избавиться, присвоив для каждого оружия общую энтитю на спавн, например - item_clip_null. Потом по истечению определенного времени - удалить энтитю.. постараюсь реализовать на выходных. Пока и это сойдет)))
 

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
2 PoD-Stas:
я проверял. работает классно. правда для моего оружия мне пришлось модель делать =)

Подумав, добавил:

2 PoD-Stas:
я тоже думаю что лучше создать одну энтитю, которой можно будет в каждой пушке присваивать модель.
 
Последнее редактирование:

Game Server

Доноры Красавчики

Пользователи онлайн

Нет пользователей онлайн.