![]() |
Страницы (10): « 1 2 3 4 [5] 6 7 8 9 » ... Последняя » Показать все 138 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Кажется, я починил DispatchAnimEvents (https://hlfx.ru/forum/showthread.php?threadid=5590)
ncuxonaT как плечи качаются, так и качаются остальные руки. Лень мне ковыряться. Типа дышит, пусть будет как есть.
Добавлено 06-12-2020 в 01:02:
Вообще, это всё на пробу сделано. Буду переделывать. При идле и ходьбе всё равно левая рука неприятно елозит по цевью, бросается в глаза. Да и углы сгиба и положение рук надо бы подглядеть у других моделей, где есть двуручное оружие.
__________________
I'm on github
I'm on opendesktop.org
Закончил барника с дробовиком. Нужно немного отполировать анимацию стрельбы и сделать анимации поворотов направо и налево.


Раз уж тут вроде и про AI разговор, то вопрос такой. Все перекопал, но не могу найти, где это поменять.
Ситуация: солдат уже заметил игрока и бежит за ним. Забегаем за угол, потом сразу же выходим. Солдат останавливается и смотрит на игрока где-то секунду, и только потом стреляет. Этого достаточно, чтобы заходить за угол туда-сюда и расстрелять солдата, ни разу не получив урона. Как бы сделать, чтобы он сразу стрелял?
Добавлено 09-12-2020 в 11:47:
Ну как это часто бывает, я пишу сюда, а потом понимаю, что делать. Животворящий форум. В общем, попробовал сделать так и кажется, это сработало:
В CBaseMonster :: CheckEnemy я поменял условие
1 | if ( !FVisible( pEnemy ) ) |
2 | { |
3 | ASSERT(!HasConditions(bits_COND_SEE_ENEMY)); |
4 | SetConditions( bits_COND_ENEMY_OCCLUDED ); |
5 | } |
1 | if ( HasConditions( bits_COND_SEE_ENEMY ) ) |
2 | ....... |
3 | else if ( !HasConditions(bits_COND_ENEMY_OCCLUDED|bits_COND_SEE_ENEMY) && ( flDistToEnemy <= 256 ) ) |
4 | ....... |
5 | else |
if (m_flLastTimeObservedEnemy + 3 <= gpGlobals->time) |
SetConditions( bits_COND_ENEMY_OCCLUDED ); |
__________________
Мой мод на Xash
Aynekko, и откуда ты взял m_flLastTimeObservedEnemy?
Это же не стандартная переменная.
По поводу поведения солдата: надо смотреть, что ему прерывает шедулю следования и какая выставляется. По тому, что я вижу, bits_COND_ENEMY_OCCLUDED прерывает атаку, но не движение. Смену шедулей можно отследить. Valve даже оставила отключенный код с алертами в ChangeSchedule.
__________________
I'm on github
I'm on opendesktop.org
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
вылетал из карты ноуклипом и смотрел с выставленными алертами. А больше я ничего у тебя не брал. У тебя там еще есть ходьба в состоянии idle вроде как, но я не стал вникать - мне в общем-то не нужна эта фича.__________________
Мой мод на Xash
Насчёт прерываний анимаций атаки. Шедули атаки же прерываются ещё и условием bits_COND_NEW_ENEMY. По-моему, это тоже плохо. Монстр начинает анимацию, получает другого врага (который, допустим, во время проигрывания анимации оказался ближе, чем предыдущий) и анимация прерывается. А ведь враг может сменяться быстрее, чем проходит время анимации, соответственно монстр может вообще стоять и постоянно прерываться. Наверно было бы лучше, если б во время тасков атаки монстр не переключался на других врагов.
На самом деле вышеописанная ситуация может случиться не только с анимациями, но и с поворотами - пока монстр поворачивается к одному врагу, враг может сменится, и монстр начнёт поворачиваться к другому, и так по кругу.
В общем, нужно ввести какую-то меру против частого переключения между противниками. Можно было бы вообще убрать прерывание по bits_COND_NEW_ENEMY для шедулей атак, но это может привести к ситуации, когда монстр с дистанционной атакой перестанет обращать внимание на противников, которые подошли ближе к нему и продолжать стрелять по врагу на расстоянии.
__________________
I'm on github
I'm on opendesktop.org
1 | #define MAX_OLD_ENEMIES 4 // how many old enemies to remember |
2 |
3 | EHANDLE m_hOldEnemy[ MAX_OLD_ENEMIES ]; |
4 | Vector m_vecOldEnemy[ MAX_OLD_ENEMIES ]; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я об этом знаю, и ничего там не натворил. Но поведение монстров требует исправления. Push и Pop - не выход, т.к. монстр всегда оперирует только m_hEnemy. При bits_COND_NEW_ENEMY он благополучно пушает старого врага в память и творит неадекватщину, например перестаёт убегать в укрытие и получает по щщам от нового врага или от обоих сразу.
А как ты представляешь, чтобы монстр одновременно со всеми разбирался? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Для этого и нужны приоритеты. Можно модифицировать старую систему, чтобы при определённых условиях монстр не отправлял m_hEnemy в список старых врагов. Я пока не знаю, как лучше поступить. Не хочется трогать стандартный код монстров. Заведу новый класс-наследник и буду работать с ним. Как раз у меня барник - первый кандидат на "поумнение". Посмотрим, что можно сделать. Я пока на это подзабил и сделал прикольную квестовую составляющую с предметами, которые надо носить в определённое место. Как только доработаю - вернусь к коду монстров.
| Временная зона GMT. Текущее время 10:48. | Страницы (10): « 1 2 3 4 [5] 6 7 8 9 » ... Последняя » Показать все 138 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024