HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Страницы (269): « Первая ... « 265 266 267 268 [269]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6880
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
Сложна-сложна.

Самый простой вариант - сделать это одной длинной анимацией. А вот если кодить, то придётся заморочиться. Проще перейти на сорс, там NPC умеют пятиться и даже одновременно атаковать. Собсно, неделю назад я принял такое решение на основе того, что на моём железе игры на сорс 2013 летают. Оригинальные компиляторы собирают карты для сорса раза в 3 дольше, чем Дядьмишины паранойевские для голдсорса (кастомные для сорса пока не пробовал), но это ещё и мой косяк, просто перенёс карты без причёсывания. Впечатления пока положительные, хл2 еп2 вполне знает многие энтити для первой халфы: функ_валлы, функ_доры, монстер_генерик, лайты. Буду попробовать, может что из этого выйдет.

Отредактировано Ku2zoff 19-08-2025 в 16:42

Сообщить модератору | IP: Записан
Сообщение: 224508

Старое сообщение 19-08-2025 16:31
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



Цитата:
Ku2zoff писал:
Самый простой вариант - сделать это одной длинной анимацией

не додумывался до этого, надо будет попробовать)

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224509

Старое сообщение 20-08-2025 08:17
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



в принципе рабочий вариант https://youtu.be/AwWeHXn8gVY
Из минусов: нпс проходят сквозь друг-друга и стены, но иногда можно применить

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Отредактировано JPEG 23-08-2025 в 20:45

Сообщить модератору | IP: Записан
Сообщение: 224512

Старое сообщение 23-08-2025 20:42
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13525
Возраст: 33

Рейтинг



Смотришь вектор куда игрок смотрит, отслеживаешь удар, если удар нанесён то отбрасываешь монстра назад по вектору взгляда игрока (задаешь велосити или импульс на время проигрывания анимации) и включаешь собственно саму анимацию. Можно ещё развернуть самого монстра мордой в направлении игрока, чтобы он потом не тупил когда сам разворачивался. Так же можно кинуть трассу из спины монстра чтобы считать дистанцию насколько далеко он должен отойти, чтобы не пятился в стенки.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 26-08-2025 в 07:10

Сообщить модератору | IP: Записан
Сообщение: 224517

Старое сообщение 26-08-2025 07:01
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



Цитата:
FiEctro писал:
Смотришь вектор куда игрок смотрит, отслеживаешь удар, если удар нанесён то отбрасываешь монстра назад по вектору взгляда игрока (задаешь велосити или импульс на время проигрывания анимации) и включаешь собственно саму анимацию. Можно ещё развернуть самого монстра мордой в направлении игрока, чтобы он потом не тупил когда сам разворачивался. Так же можно кинуть трассу из спины монстра чтобы считать дистанцию насколько далеко он должен отойти, чтобы не пятился в стенки.


хм, попробую сколхозить в упрощённом виде, после удара просто вызвать импульс назад, и в анимации удара добавить анимацию движения ног назад без передвижения рут-кости

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224520

Старое сообщение 26-08-2025 14:51
- За что?
ZGreen
Роугнесс

Дата регистрации: Sep 2007
Проживает: Красноярск
Сообщений: 431
Возраст: 37

Рейтинг



Почему бы не сделать анимацию удара с подшагом и последующим отскоком? Вроде, когда дерешься несподручно нос в нос стоять. Теоретически. Сам не дерусь, я только на форуме смелый.

Сообщить модератору | IP: Записан
Сообщение: 224522

Старое сообщение 26-08-2025 15:25
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



Цитата:
ZGreen писал:
Почему бы не сделать анимацию удара с подшагом и последующим отскоком? Вроде, когда дерешься несподручно нос в нос стоять. Теоретически. Сам не дерусь, я только на форуме смелый.


так я так делал, при анимации нпс может сквозь стены проходить

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224523

Старое сообщение 26-08-2025 15:35
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6880
Возраст: 34

Рейтинг



Цитата:
ZGreen писал:
Почему бы не сделать анимацию удара с подшагом и последующим отскоком?

Мудрить с анимациями не надо (если только хочется сделать быстро и просто), у ИИ в халфе есть система щедъюлей, где можно переключать активности, типа: шаг вперёд, удар, шаг назад, тремя разными анимациями. Оно не работает как хочется по двум причинам: первая - затупы при переключении активностей, из-за того, что серверный фпс плавает и эвенты плохо отлавливаются (привет ковыряния с DispatchAnimEvents), вторая - монстры не умеют ходить назад, им надо повернуться лицом по направлению движения. И если второе можно победить, невозбранно модифицировав код перемещения с оглядкой на летающих монстров, то первое очень геморно, и корень проблемы сидит в движке, как объяснял Дядя Миша, ЕМНИП.

Добавлено 27-08-2025 в 00:34:

Там даже в коде flInterval фиксированный - 0.1, чтобы срабатывания DispatchAnimEvents совпадали с интервалами тчинка монстра gpGlobals->time + 0.1. Я уже точно не помню, но вроде это нужно для того, чтобы клиентский и серверный эвенты срабатывали одновременно. В этой теме я экспериментировал, и в разных вариациях было так, что либо клиентский эвент опаздывает на один pev->frame за серверным, либо серверный не срабатывает. ДМ в этой же теме упоминал, что интервал в IEngineStudio.ClientEvents - сотые доли секунды, а в CBaseAnimating::DispatchAnimEvents - десятые. Соответственно, клиент в любом случае воспроизведёт эвент, например маззлфлеш при стрельбе. А вот сервер может пропустить. Отсюда все затупы со сменой активностей, например, при попытках монстра выйти из боя и найти укрытие. Мой вариант в теме вполне рабочий, но не на моделях, где эвент стоит на последнем кадре. Я забил на это всё, не стал дальше копаться в теме. Хотя очень хотел сделать НПС подвижнее. Если анимаций нет, незачем и код для них писать.

Добавлено 27-08-2025 в 00:50:

Есть ещё один вариант, но он, на мой взгляд, лишает всей прелести использования студио эвентов на сервере. Это полностью выкинуть эту замечательную систему, и писать фиксированные тайминги в коде, что де на такой-то секунде такой-то анимации монстр наносит урон, делает выстрел, или что-то ещё. Такое себе, потому что опять же, фпс всегда разный, и попасть в эти тайминги нереально. В таком случае монстры должны быть анимированы как игрок. А ведь через эвенты можно не только вызывать функции из кода монстров, но и активировать энтити на карте и ещё много чего.

Отредактировано Ku2zoff 26-08-2025 в 17:54

Сообщить модератору | IP: Записан
Сообщение: 224524

Старое сообщение 26-08-2025 17:50
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



ну в общем получилось так. Говнокот, но по-крайней мере работает

void CZombie :: HandleAnimEvent( MonsterEvent_t *pEvent )
{
switch( pEvent->event )
{
case ZOMBIE_AE_ATTACK_RIGHT:
{
//в момент удара запускаются таймеры на включении отступления и его выключение
m_flFallbackOn = gpGlobals->time + 0.5; //задержка перед отступлением
m_flFallbackOff = gpGlobals->time + 1.5; //то, сколько бежит назад



int CZombie::IgnoreConditions ( void )
{
int iIgnore = CBaseMonster::IgnoreConditions();

if (m_flFallbackOn && gpGlobals->time >= m_flFallbackOn)
m_fFallback = 1; //разрешить отступать

if (m_flFallbackOff && gpGlobals->time >= m_flFallbackOff)
m_fFallback = 0;

if (m_fFallback == 1)
pev->velocity = pev->velocity - gpGlobals->v_forward * 100; //отступление

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224525

Старое сообщение 27-08-2025 00:02
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6880
Возраст: 34

Рейтинг



JPEG ну конечно говнокод. По-хорошему должно быть что-то такое:

C++ Source Code:
1
// primary melee attack
2
Task_t	tlPrimaryMeleeAttack1[] =
3
{
4
  { TASK_STOP_MOVING,	0		},
5
  { TASK_FACE_ENEMY,	(float)0	},
6
  { TASK_MELEE_ATTACK1,	(float)0	},
7
  { TASK_FALL_BACK,           (float)0	}, // грамотнее будет TASK_RETREAT
8
};
9
 
10
case TASK_FALL_BACK:
11
{
12
  m_IdealActivity = ACT_WALK_BACK;
13
  break;
14
}

Хотя, если работает, то почему не использовать?

Добавлено 28-08-2025 в 21:38:

Почему таски с щедъюлями лучше? Потому что не надо заводить какие-то сомнительные переменные типа m_fFallback. Тайминги можно задавать прям в массиве тасков, поставив вместо нуля другое число.

Отредактировано Ku2zoff 28-08-2025 в 14:49

Сообщить модератору | IP: Записан
Сообщение: 224526

Старое сообщение 28-08-2025 14:38
- За что?
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



Пытаюсь перенести TE_BREAKMODEL на клиент, пока в упрощённом виде, чтобы хотя бы что-то появлялось. В чём тут ошибка?

code:
extern int gmsgImpact; int CZombie :: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType ) { int iModel; iModel = PRECACHE_MODEL( "models/agibs2.mdl" ); MESSAGE_BEGIN(MSG_ALL, gmsgImpact); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_COORD( pev->velocity.x ); WRITE_COORD( pev->velocity.y ); WRITE_COORD( pev->velocity.z ); WRITE_SHORT( iModel ); //model id# MESSAGE_END(); ------------------------------------------------------------ extern void EV_HLDM_Particles(vec3_t pos, vec3_t dir, int modelIndex ); int CHud :: MsgFunc_Impact( const char *pszName, int iSize, void *pbuf ) { BEGIN_READ( pbuf, iSize ); vec3_t pos, ang; int modelIndex; pos[0] = READ_COORD(); pos[1] = READ_COORD(); pos[2] = READ_COORD(); ang[0] = READ_COORD(); ang[1] = READ_COORD(); ang[2] = READ_COORD(); modelIndex = READ_SHORT(); EV_HLDM_Particles( pos, ang, modelIndex ); return 1; } ---------------------------------------------------------- void EV_HLDM_Particles(vec3_t pos, vec3_t dir, int modelIndex) { model_t *pmodel; float random = 30; vec3_t vecSpot; vecSpot[0] = pos[0] + gEngfuncs.pfnRandomFloat( -0.5f, 0.5f ); vecSpot[1] = pos[1] + gEngfuncs.pfnRandomFloat( -0.5f, 0.5f ); vecSpot[2] = pos[2] + gEngfuncs.pfnRandomFloat( -0.5f, 0.5f ); TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->CL_TempEntAlloc( (float*)&vecSpot, pmodel ); if( !pTemp ) return; pTemp->entity.curstate.body = gEngfuncs.pfnRandomLong( 0, pTemp->frameMax ); pTemp->entity.curstate.rendermode = kRenderTransTexture; pTemp->entity.curstate.renderamt = pTemp->entity.baseline.renderamt = 128; pTemp->flags |= FTENT_COLLIDEWORLD | FTENT_FADEOUT | FTENT_SLOWGRAVITY; pTemp->entity.baseline.origin[0] = dir[0] + gEngfuncs.pfnRandomFloat( -random, random ); pTemp->entity.baseline.origin[1] = dir[1] + gEngfuncs.pfnRandomFloat( -random, random ); pTemp->entity.baseline.origin[2] = dir[2] + gEngfuncs.pfnRandomFloat( 0, random ); }

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224535

Старое сообщение вчера 09:32
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6880
Возраст: 34

Рейтинг



JPEG используй pEfxAPI, там уже есть нужная функция спавна кусков для мессаги TE_BREAKMODEL, которая аллочит темпэнтитю и задаёт ей все параметры, вот код из ксаш-движка:

C++ Source Code:
1
case TE_BREAKMODEL:
2
  pos[0] = READ_COORD();
3
pos[1] = READ_COORD();
4
pos[2] = READ_COORD();
5
pos2[0] = READ_COORD();
6
pos2[1] = READ_COORD();
7
pos2[2] = READ_COORD();
8
ang[0] = READ_COORD();
9
ang[1] = READ_COORD();
10
ang[2] = READ_COORD();
11
random = (float)READ_BYTE() * 10.0f;
12
modelIndex = READ_SHORT();
13
count = READ_BYTE();
14
life = (float)(READ_BYTE() * 0.1f);
15
flags = READ_BYTE();
16
gEngfuncs.pEfxAPI->R_BreakModel(pos, pos2, ang, random, life, count, modelIndex, (char)flags);
17
break;

А зачем переносишь? Хочешь добавить какие-то новые параметры? Мессага с сервера вполне справляется с задачей, незачем копипастить код на клиент.

Сообщить модератору | IP: Записан
Сообщение: 224536

Старое сообщение вчера 16:43
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33075
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
JPEG писал:
Пытаюсь перенести TE_BREAKMODEL на клиент, пока в упрощённом виде

Не парь на мозг, ты же на годот перешёл, у тебя и в подписи было.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 224537

Старое сообщение вчера 18:01
-
JPEG
Житель форума

Дата регистрации: Sep 2013
Проживает: рф
Сообщений: 683

Рейтинг



Цитата:
Ku2zoff писал:
JPEG используй pEfxAPI, там уже есть нужная функция спавна кусков для мессаги TE_BREAKMODEL, которая аллочит темпэнтитю и задаёт ей все параметры, вот код из ксаш-движка:
C++ Source Code:
1
case TE_BREAKMODEL:
2
  pos[0] = READ_COORD();
3
pos[1] = READ_COORD();
4
pos[2] = READ_COORD();
5
pos2[0] = READ_COORD();
6
pos2[1] = READ_COORD();
7
pos2[2] = READ_COORD();
8
ang[0] = READ_COORD();
9
ang[1] = READ_COORD();
10
ang[2] = READ_COORD();
11
random = (float)READ_BYTE() * 10.0f;
12
modelIndex = READ_SHORT();
13
count = READ_BYTE();
14
life = (float)(READ_BYTE() * 0.1f);
15
flags = READ_BYTE();
16
gEngfuncs.pEfxAPI->R_BreakModel(pos, pos2, ang, random, life, count, modelIndex, (char)flags);
17
break;

А зачем переносишь? Хочешь добавить какие-то новые параметры? Мессага с сервера вполне справляется с задачей, незачем копипастить код на клиент.


я хочу задействовать kRenderTransTexture у TE_BREAKMODEL. Вроде ж в коде нет такого параметра

Добавлено сегодня в 13:52:

Цитата:
Дядя Миша писал:
Не парь на мозг, ты же на годот перешёл, у тебя и в подписи было.

ну лет 5 назад какой-то застой был. Сейчас хотя бы есть смысл выпускать мод - в него поиграют, в инди же наоборот слишком много проектов

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

Сообщить модератору | IP: Записан
Сообщение: 224538

Старое сообщение сегодня 10:52
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 15:06. Новая тема    Ответить
Страницы (269): « Первая ... « 265 266 267 268 [269]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024