![]() |
Страницы (2): [1] 2 » Показать все 16 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- handleanimevents (https://hlfx.ru/forum/showthread.php?threadid=590)
handleanimevents
Я наверное чего то не до понимаю, но мой новоиспеченый монстр ни у кого не может отнять health. Ничего понять не могу.
Вот описание:
void CW :: HandleAnimEvent( MonsterEvent_t *pEvent )
{
switch( pEvent->event )
{
case WA:
{
// do stuff for this event.
CBaseEntity *pHurt = CheckTraceHullAttack(25, gSkillData.skwdmgbite, DMG_SLASH );
if ( pHurt ) //Это условие выполняется
{
if ( pHurt->pev->flags & (FL_MONSTER|FL_CLIENT) ) А это уже нет
{
pHurt->pev->punchangle.x = 5;
pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_forward * -100;
EMIT_SOUND(ENT(pev), CHAN_BODY, "barney/standback.wav", 1, ATTN_NORM);
}
}
if (RANDOM_LONG(0,1))
EMIT_SOUND(ENT(pev), CHAN_BODY, "zombie/claw_miss1.wav", 1, ATTN_NORM);
}
break;
default:
CBaseMonster::HandleAnimEvent( pEvent );
break;
}
}
В QC прописано:
$sequence "attack1" "attack1" fps 10 ACT_MELEE_ATTACK1 1 { event 1 8 }
По-моему в случае с
code:
pHurt->pev->flags & (FL_MONSTER|FL_CLIENT)
Vetal раз не выполняется второе условие, посмотри, какой класснейм у pHurt:
ALERT(at_console,"pHurt: %s\n", STRING(pHurt->pev->classname));
И первый параметр у CheckTraceHullAttack попробуй увеличить.
Добавлено сегодня в 08:05:
Wargon это зачем? pHurt это не edict, а CBaseEntity*.
__________________
Не, меня второе условие вообще не волнует на самом деле. У меня проблема в том, что монстр не отнимает жизни у других монстров(у player соответственно тоже).
А на счет CheckTraceHullAttack уже все что можно было попеременял... результат 0.
А еще что больше удивляет, то что это обрезок из HandleAnimEvent зомби. Как там может что то не работать.
Замени gSkillData.skwdmgbite на какое-нибудь число, например 20. Возможно, у тебя эта переменная не инициализирована правильно.
__________________
Не поверишь. Менял. Даже DMG_SLASH на разные DMG менял. И flDist какие только не ставил. Нифига.
Vetal либо у тебя не вызывается сам евент этот (поставь алерт в нем), либо дамаж = 0. Чудес не бывает.
__________________
Vetal а что это за имя для кейса WA ???
эвенты не держат имена, только цифры.
Дядя Миша ну дефайн у него такой, видимо... что тут удивительного...
__________________
там перед этим кодом стоит
#define WA 0x01 (просто еденица тоже стояла).
может не то что то? Хотя отсебячины никакой все по аналогам других монстров.
и сам эвент вызывается или как тогда звуки издаются?
А если gSkillData.skwdmgbite заменить на 20 например, то как дамаж будет нулевым.
Ладно. Надо весь код снести и по новой накатать. Может не накосячу.
Хотя нет. Еще помучаю.
И я хз как эти ALERTы вставлять.
Так?
1 | if ( pHurt->pev->flags & (FL_MONSTER|FL_CLIENT) ) // А это уже нет |
2 | { |
3 | #if _DEBUG |
4 | ALERT(at_console,"pHurt: %s\n", STRING(pHurt->pev->classname)); |
5 | #endif |
6 |
7 | pHurt->pev->punchangle.x = 5; |
8 | pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_forward * -100; |
9 | EMIT_SOUND(ENT(pev), CHAN_BODY, "barney/standback.wav", 1, ATTN_NORM); |
10 | } |
__________________
Vetal а ты UTIL_MakeVectors();
делал?
а то глобальные вектора юзаешь, а кто AngleVectors делать будет?
Дядя Миша, да, они делаются в CheckTraceHullAttack.
__________________
XaeroX ну тогда это твоя вотчина.
Ты у нас специалист по ДНК.
Ответ на этот вопрос:
В Spawn для монстра было написано
UTIL_SetSize( pev, Vector( -1, -1, 0 ), Vector( 1, 1, 1 ) );
Поменять ее хотябы на
UTIL_SetSize( pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX );
и все заработало.
Временная зона GMT. Текущее время 13:03. | Страницы (2): [1] 2 » Показать все 16 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024