Sidebar

Спрыгивающий хедкраб

Ku2zoff

Member
12.08.2010
320
29
13
18
Спрыгивающий хедкраб

Вот тутор, который объясняет как кодингом сделать спрыгивающего с зомби хедкраба как в хл2. Это чтобы некоторые товарищи не возмущались. Рассчитан на обычный HLSDK 2.3, но должен подойти и к Спириту и к Ксашмоду.
1. Открываем файл zombie.cpp, в декларацию класса CZombie добавляем новую функцию:
Код:
	void Killed( entvars_t *pevAttacker, int iGib );
2. В void CZombie :: Precache() вставляем прекэш энтити хедкраба:
Код:
    UTIL_PrecacheOther( "monster_headcrab" );
3. Само тело функции засовываем куда-нибудь в этом файле, хоть в конец, хоть после декларации класса:
Код:
void CZombie :: Killed( entvars_t *pevAttacker, int iGib )
{
	BOOL bSpawnCrab = TRUE; // спавним краба всегда

	if(m_LastHitGroup != HITGROUP_HEAD) // если попадаем не в голову
		bSpawnCrab = RANDOM_LONG(0,1); // спавним краба рандомно

	if (!bSpawnCrab) // если не спавним краба
	{
		CBaseMonster::Killed( pevAttacker, iGib ); // вызываем функцию killed, чтобы убить зомби
		return;
	}

	// задаём координаты, в которых надо создать краба
	Vector vecSpawn = pev->origin; // ориджин зомбяка (в ногах на уровне пола)
	vecSpawn.z = pev->origin.z + 72; // поднимаем точку по оси Z на 72 юнита, т.е. примерно на уровень головы

	pev->body = 1; // меняем бодигруппу с краба на черепушку

	CBaseEntity *pCrab = CBaseEntity::Create( "monster_headcrab", vecSpawn, pev->angles, edict() ); // создаём краба
	pCrab->pev->spawnflags |= SF_MONSTER_FALL_TO_GROUND; // краб должен падать на землю, а не висеть в воздухе

	// направление прыжка краба
	Vector vecJumpDir;
	UTIL_MakeVectors ( pev->angles );

	if(m_LastHitGroup == HITGROUP_HEAD) // если мы попали в голову
	{
		// задаём направление (вперёд) и скорость (120)
		vecJumpDir = Vector( gpGlobals->v_forward.x, gpGlobals->v_forward.y, gpGlobals->v_forward.z ) * 120;
		pCrab->Killed(NULL, 1); // убиваем краба
	}
	else // если мы попали в тело
	{
		if (m_hEnemy != NULL) // если у зомби есть враг
		{
			float gravity = CVAR_GET_FLOAT("sv_gravity"); // получаем значение гравитации

			// рассчитываем скрость прыжка в зависимости от расстояния до врага
			float height = (m_hEnemy->pev->origin.z + m_hEnemy->pev->view_ofs.z - pCrab->pev->origin.z);
			if (height < 4)
				height = 4;
			float speed = sqrt( 1.5 * gravity * height );
			float time = speed / gravity;

			// задаём направление (в сторону врага)
			vecJumpDir = (m_hEnemy->pev->origin + m_hEnemy->pev->view_ofs - pCrab->pev->origin);
			vecJumpDir = vecJumpDir * ( 1.0 / time );

			// задаём скорость
			vecJumpDir.z = speed;

			// ограничиваем дальность прыжка 650 юнитами
			float distance = vecJumpDir.Length();
				
			if (distance > 650)
				vecJumpDir = vecJumpDir * ( 650.0 / distance );
			}
			else // если врага нет
				vecJumpDir = Vector( gpGlobals->v_forward.x, gpGlobals->v_forward.y, gpGlobals->v_up.z ) * 20;
	}
	pCrab->pev->velocity = vecJumpDir; // применяем направление и скорость к крабу
	CBaseMonster::Killed( pevAttacker, iGib ); // вызываем функцию killed, чтобы убить зомби
}
Пока что недоработано:
1. Краб не кусает врага при столкновении с ним в момент прыжка.
2. Краб не отлетает в направлении выстрела, если зомби был убит попаданием в голову.
3. Краб может создасться, когда зомби порвало на куски после того, как он был убит во время выполнения скрипта.

P.S. не забудте заменить модельку зомби на ту, в которой есть нужные бодигруппы.
 
Последнее редактирование:

JPEG

Active member
02.10.2013
951
27
Подниму старый тутор, всё отлично работает, заготовил моделей для него, но вместо краба пол тела зомби - без ног, довольно эффектно получается, авось кому надо.


Я правда сделал, чтобы краб наоборот отлетал в сторону от игрока и ещё что-то менял. Заготовки брал из мода Resident Evil : Cold Blood Beta 2, там кстати больше текстур зомби, здесь только одна
 

Вложения

Ku2zoff

Member
12.08.2010
320
29
13
18
2 Yo Den:
Подкинь это Гулю, пусть заюзает в THRE.
 

Half-Life: Alyx release

000
Дней
00
часа(ов)
00
minutes
00
Секунды
До выхода Half-Life: Alyx
Half-Life: Alyx вышел!

Новые сообщения

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

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

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