Среда, 09.10.2024, 06:10
Приветствую Вас Guest | RSS
Главная страница | Статьи | Регистрация | Вход
Меню сайта

Случайный рисунок

Категории каталога
Туториалы по маппингу (HL2) [68]
Туториалы по маппингу для Half-Life
Туториалы по текстурированию (HL2) [10]
Туторы по текстурированию для Half-Life
Туториалы по моделированию (HL2) [9]
Туторы по моделированию для Half-Life
Туториалы по программированию (HL2) [53]
Туторы по прагроммированию для Half-life
Другие туториалы (HL1 и HL2) [4]
Туторы которые не вошли в другие категории
Half-Life 2 Beta [1]
Статьи о npc и weapon в бете Half-Life 2, а так же мануалы и FAQ.
Туториалы по маппингу (HL1) [14]
Туторы по маппингу для Half-Life 1
Туториалы по текстурированию (HL1) [1]
Туторы по текстурированию для Half-Life 1
Туториалы по моделированию (HL1) [1]
Туторы по моделированию для Half-Life 1
Туториалы по программированию (HL1) [30]
Туторы по программированию для Half-Life 1

Наш опрос
Очистить ли форум от всех сообщений и начать всё с чистого листа?
Всего ответов: 563

Начало » Статьи » Туториалы по программированию (HL2)

[HL2]Расчленёнка
Приветствую всех посетителей сайта Detler'a.Многие,часто задаются вопросом "Как сделать так чтоб противники разлетались от выстрелов и взрывов?"(Маньяки блин) =)
Я расскажу как это сделать,примером послужит Zombine.Почему? Да потому-что в его файле уже зарегистрированы все функции которые нам понадобятся.Ну а по примеру это можно будет перенести на любых других npc.Предупреждаю сразу,искать модели придётся вам самим т.к я юзаю тоже скаченные из нета =)
В общем приступим.На сервере открываем npc_zombine.cpp
Ищем
Code
void CNPC_Zombine::TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr )

И там нужно воткнуть код
Code
if ( info.GetDamageType() & ( DMG_BULLET | DMG_CLUB ) ) // DMG_BULLET говорит нам от каких патрон\урона будет работать наш код
  {
  if ( ptr->hitgroup == HITGROUP_HEAD ) // HITGROUP_HEAD Будет указывать на часть тела в которую мы стреляем
  {
  SetModel( "models/headlessbody/zombie.mdl" ); //Говорит какой моделью должен стать наш NPC
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/gibhead.mdl", 5 ); // Показывает какую модель будет в этом случае спаунить.
  }

Тут показано что если мы стреляем в голову из дробовика,то голова пропадает с основной модели и голова спаунится отдельно.
Это мы распределяем по виду Дамага(повреждения)
Так же давайте разберём пример,в котором будет происходить тоже самое,только не при виде дамага,а в зависимости от кол-во повреждения.
Code
if( info.GetDamage() >= ( m_iMaxHealth * 0.75f ) ) // Это и будет наше указание на дамаг.Цифру меняем по вашему усмотрению.
  {
  if ( ptr->hitgroup == HITGROUP_HEAD )
  {
  SetModel( "models/headlessbody/zombie.mdl" );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/gibhead.mdl", 5 );
  }


И теперь чтоб игра не вылетала,нужно в функции
Code
void CNPC_Zombine::Precache( void )

Указать наши модели таким образом(естественно заменяя ссыль на модели на свои):
Code
BaseClass::Precache();

  PrecacheModel( "models/zombie/classic_legs.mdl" );
  PrecacheModel( "models/zombie/zombie_soldier.mdl" );
  PrecacheModel( "models/gibs/pgib_p1.mdl" );
  PrecacheModel( "models/gibs/pgib_p2.mdl" );
  PrecacheModel( "models/gibs/pgib_p3.mdl" );
  PrecacheModel( "models/gibs/pgib_p4.mdl" );
  PrecacheModel( "models/gibs/pgib_p5.mdl" );


Теперь,какие бывают Hitgroup'ы это
HITGROUP_HEAD голова
HITGROUP_CHEST грудь(могу перепутать с животом)
HITGROUP_STOMACH живот
HITGROUP_LEFTARM Левая рука
HITGROUP_RIGHTARM Правая рука
HITGROUP_LEFTLEG Левая нога
HITGROUP_RIGHTLEG Правая нога

Если хотите чтоб вашего зомби разрывало на куски только от взрыва,тогда ищем фунцию
Code
void CNPC_Zombine::Event_Killed( const CTakeDamageInfo &info )

Она говорит о том,что будет с нашим зомби,если он умирает.
Туда добавим(Меняя модели на свои)
Code
if( info.GetDamageType() & ( DMG_BLAST ) ) // Говорит о том что разлетается зомби только от взрывов.
{
  SetModel( "models/zombie/classic_legs.mdl" );
   
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/pgib_p1.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/pgib_p2.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/pgib_p3.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/pgib_p4.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/pgib_p5.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_jaw.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_scapula.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_scapula.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p1.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p2.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p3.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p4.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p5.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/rgib_p6.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/gibhead.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/shoe.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/leg.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/niku1.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_spine.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_ribs.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/hgibs_jaw.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/heart.mdl", 5 );
  CGib::SpawnSpecificGibs( this, 1, 750, 1500, "models/gibs/brain.mdl", 5 );


Вот и готово.Так же не забываем прописывать все модели не только тут но и регистрировать их в
Code
void CNPC_Zombine::Precache( void )

Всё,радуемся.
Будут вопросы,буду отвечать =)
Категория: Туториалы по программированию (HL2) | Добавил: Dark_Alex (30.06.2011)
Просмотров: 3327 | Комментарии: 21 | Рейтинг: 4.7 |

Всего комментариев: 2
2 Dark_Alex  
0
Боди-группы

1 Chyvak  
0
Интерестно, а как сделать чтобы труп можно было разрывать?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Кто в Онлайн

Друзья сайта

Баннеры

  Сайт CrazyArts   Black   Сообщество сайтов о Half-Life   Самый   Только   Все   hl2 top 100     Rambler's Top100  

игры
игры

  Каталог сайтов Планета Топ 100 - Planet Top 100       ТОП ЛУЧШИХ ИГРОВЫХ САЙТОВ           Detroit Team Site :: Моды от Detroit Team, видео, новости.   Naruto-kun[Звезда Наруто]  


The idea of dising: Homie7