Блин, одни косяки как обычно пошли. Самое интересное, что не работает пауза, хотя я вроде говорю НПС, что надо think.
Ну если конкретнее, то пара вопросов по самой функции:
code:
if (tr.m_pEnt->IsNPC() && !tr.m_pEnt->IsEFlagSet( EFL_NO_MEGAPHYSCANNON_RAGDOLL ) && tr.m_pEnt->MyNPCPointer()->CanBecomeRagdoll() )
{
pullDir = vstart - tr.m_pEnt->WorldSpaceCenter(); // вектор пуляния нашего НПС
float CurrentLife = tr.m_pEnt->GetHealth() - 10; // записываем жизни и отнимаем 10 (урон от толчка)
CTakeDamageInfo info( pPlayer, pPlayer, 0.0f, DMG_GENERIC ); // информация об уроне (для галочки, чтобы функция не ругалась
tr.m_pEnt->MyCombatCharacterPointer()->BecomeRagdoll ( info, -pullDir * 9000.0f ); // Сделали НПС рагдоллом и запульнули его.
if (CurrentLife > 0) // если после всего этого наш НПС еще жив
{
tr.m_pEnt->SetNextThink ( gpGlobals->curtime + 4.0f); // пусть полностью улежится
CBaseEntity::Create((char*)STRING( tr.m_pEnt->GetEntityName() ), tr.m_pEnt->GetAbsOrigin(), -ang );
// создаем такого же НПС, в последней точке, обращенного взглядом к игроку (чтобы он не потерялся и сразу увидел врага)
UTIL_Remove (tr.m_pEnt); // убираем наш рагдол
}
}
Функция неполная, оставил только самое главное и проблемное
- Ну самое главное - почему не работает пауза?
- В чем ошибка на первом аргументе функции CBaseEntity::Create? В самой игре он пишет unknown type entry. (ну с этим методом проб может и смог бы разобраться)
- И еще довольно интересный вопрос: Вот я применяю функцию BecomeRagdoll к tr.m_pEnt, а после этой функции можно ли обращаться к ней также, tr.m_pEnt?? Просто там ведь идет Think дальше, может поэтому он не работает?
- И кстати, как обращаться к новоиспеченной энтри, которая создастся командой Create?? Ее ведь нужно будет усыпить, дать ей подумать, поставить анимки и т.д.
Короче я нубас, и этим все сказано