Ну вот. Проведя несколько несложных мыслительных операций и запоров три файла zombie.cpp, я наконец-то устроил так, чтобы при попадании в разные части тела зомби спавнилась разная по цвету кровь. Это реализованно в хл2: при стрельбе в голову(по крабу) с зомби брызжет зелёная кровь, а при стрельбе в тело - жёлтая в перемешку с красной. Чтобы у зомби в хл1 было нечто подобное надо открыть zombie.cpp и подключить туда новый заголовочный файл:
#include "extdll.h" #include "util.h" #include "cbase.h" #include "monsters.h" #include "schedule.h"
#include "weapons.h" //Для задекларирования функции SpawnBlood
Далее нужно добавить в описание класса CZombie новую строчку:
// No range attacks BOOL CheckRangeAttack1 ( float flDot, float flDist ) { return FALSE; } BOOL CheckRangeAttack2 ( float flDot, float flDist ) { return FALSE; } int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );
void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);//Это и будет рисовать кровь
Потом, ниже после void CZombie :: HandleAnimEvent( MonsterEvent_t *pEvent ) воткните:
void CZombie::TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { switch( ptr->iHitgroup) { case HITGROUP_CHEST://Грудь case HITGROUP_STOMACH://Живот case HITGROUP_LEFTLEG://Левая нога case HITGROUP_RIGHTLEG://Правая нога case HITGROUP_LEFTARM://Левая рука case HITGROUP_RIGHTARM://Правая рука case HITGROUP_GENERIC://Прочие хитгруппы SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_RED, flDamage * 5.0);// Спавнится красная кровь break; case HITGROUP_HEAD://Голова(Хедкраб) SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_YELLOW, flDamage * 5.0);// Спавнится жёлтая кровь break; } CBaseMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); }
После этого надо изменить параметр m_bloodColor = BLOOD_COLOR_GREEN; в void CZombie :: Spawn() на m_bloodColor = DONT_BLEED; чтобы не спавнилась жёлтая кровь по дефолту. На этом всё. Можно установить индивидуальный цвет крови для каждой хитгруппы, но как перевести цвет из RGB в халфовский формат цвета крови я не знаю, поэтому пока есть только два цвета.
ЗЫ. Сорри что немножко криво хитгруппы расписаны
Источник: http://www.hlfx.ru/forum/showthread.php?s=8332d886bea44b3d5ba7efc42cb1f496&threadid=700 |