HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Кажется, я починил DispatchAnimEvents
Досконально не тестировал
Страницы (9): « 1 2 3 4 [5] 6 7 8 9 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



ncuxonaT как плечи качаются, так и качаются остальные руки. Лень мне ковыряться. Типа дышит, пусть будет как есть.

Добавлено 06-12-2020 в 01:02:

Вообще, это всё на пробу сделано. Буду переделывать. При идле и ходьбе всё равно левая рука неприятно елозит по цевью, бросается в глаза. Да и углы сгиба и положение рук надо бы подглядеть у других моделей, где есть двуручное оружие.

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

Старое сообщение 05-12-2020 18:02
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 908

Рейтинг



Цитата:
Ku2zoff писал:
Будем посмотреть. Возможно, придётся действительно заводить список врагов.


Я ещё подумал на эту тему. В HL же есть разные градации неприязни. Если барник в качестве врага получит кого-то кого он "ненавидит" (HATE), то будет игнорить всех, к кому степень неприязни ниже (DISLIKE), соответственно и твои проверки на TOOCLOSE скорее всего не сработают (ну смотря как ты написал). Т.е. может возникнуть ситуация, когда ненавидимый враг стоит далеко, а другой подходит вплотную к барнику, и тот убегать не станет.

В общем, ещё один аргумент в пользу смены системы.

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org

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

Старое сообщение 06-12-2020 09:45
- За что?
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



Закончил барника с дробовиком. Нужно немного отполировать анимацию стрельбы и сделать анимации поворотов направо и налево.

https://i.imgur.com/jyP3Mjh.jpg

https://i.imgur.com/oVtu6ez.jpg

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

Старое сообщение 06-12-2020 18:34
- За что?
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



Цитата:
FreeSlave писал:
Если ты убрал из шедули прерывание по bits_COND_NEW_ENEMY, то барник и не будет получать врагов до тех пор, пока эта шедуля играется.

У меня есть подозрение, что сегодня я нарвался на такой баг. Барник застрелил одного зомби и побежал перезаряжаться. Упёрся лбом во второго и продолжил бежать в него как в стенку. Ну и выхватил. Попытаюсь воспроизвести и отловить. Если повторится, придётся решать проблему.

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

Старое сообщение 07-12-2020 01:01
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 587
Возраст: 28

Рейтинг



Раз уж тут вроде и про AI разговор, то вопрос такой. Все перекопал, но не могу найти, где это поменять.
Ситуация: солдат уже заметил игрока и бежит за ним. Забегаем за угол, потом сразу же выходим. Солдат останавливается и смотрит на игрока где-то секунду, и только потом стреляет. Этого достаточно, чтобы заходить за угол туда-сюда и расстрелять солдата, ни разу не получив урона. Как бы сделать, чтобы он сразу стрелял?

Добавлено 09-12-2020 в 11:47:

Ну как это часто бывает, я пишу сюда, а потом понимаю, что делать. Животворящий форум. В общем, попробовал сделать так и кажется, это сработало:
В CBaseMonster :: CheckEnemy я поменял условие

C++ Source Code:
1
if ( !FVisible( pEnemy ) )
2
{
3
  ASSERT(!HasConditions(bits_COND_SEE_ENEMY));
4
  SetConditions( bits_COND_ENEMY_OCCLUDED );
5
}

Это как было. Здесь я закомментировал строчку SetConditions.
Далее, идут условия:
C++ Source Code:
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

И вот в этом else я прописал вот такое:
C++ Source Code:
if (m_flLastTimeObservedEnemy + 3 <= gpGlobals->time)
  SetConditions( bits_COND_ENEMY_OCCLUDED );


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

__________________
Мой мод на Xash

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

Старое сообщение 09-12-2020 08:47
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 908

Рейтинг



Aynekko, и откуда ты взял m_flLastTimeObservedEnemy? Это же не стандартная переменная.

По поводу поведения солдата: надо смотреть, что ему прерывает шедулю следования и какая выставляется. По тому, что я вижу, bits_COND_ENEMY_OCCLUDED прерывает атаку, но не движение. Смену шедулей можно отследить. Valve даже оставила отключенный код с алертами в ChangeSchedule.

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org

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

Старое сообщение 09-12-2020 10:40
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 587
Возраст: 28

Рейтинг



Цитата:
FreeSlave писал:
m_flLastTimeObservedEnemy

У тебя с гитхаба, ага, большое спасибо. Теперь у меня тоже нпс забывают свою цель, выставил им оптимально 15 секунд, вроде норм.
Я почему-то думал, что она стандартная, уже и забыл.
Цитата:
FreeSlave писал:
bits_COND_ENEMY_OCCLUDED прерывает атаку, но не движение

Ну вот без временного отрезка в 3 секунды он просто теряет игрока, потом я тут же выхожу из-за угла и он начинает снова - остановка, проверка атаки, потом стрельба. Т.к. я туда-сюда быстро хожу, он просто не успевает и "застревает" в этих щедулях.

__________________
Мой мод на Xash

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

Старое сообщение 09-12-2020 11:20
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 908

Рейтинг



Цитата:
Aynekko писал:
У тебя с гитхаба, ага, большое спасибо.


Ну раз используешь мою кодовую базу, то жду багрепортов, а то и пуллреквестов

Цитата:
Aynekko писал:
он просто теряет игрока, потом я тут же выхожу из-за угла и он начинает снова - остановка, проверка атаки, потом стрельба


Т.е. ты всё-таки говоришь об остановке во время атаки, а не во время движения. Да, есть такая проблема. Я даже волтигорам убрал bits_COND_ENEMY_OCCLUDED из шедули атаки, потому что анимация создания заряда довольно долгая, да и сам заряд летит не мгновенно, так что такая проверка ни к чему. Раз уж начала - пусть стреляет. О том, чтобы применить нечто подобное к другим монстрам, я не думал. Хотя стоило бы.

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org

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

Старое сообщение 09-12-2020 11:44
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 587
Возраст: 28

Рейтинг



Цитата:
FreeSlave писал:
жду багрепортов

Да тут вроде все понятно, через 15 секунд они восстанавливаются на позицию вылетал из карты ноуклипом и смотрел с выставленными алертами. А больше я ничего у тебя не брал. У тебя там еще есть ходьба в состоянии idle вроде как, но я не стал вникать - мне в общем-то не нужна эта фича.
Цитата:
FreeSlave писал:
убрал bits_COND_ENEMY_OCCLUDED из шедули атаки, потому что анимация создания заряда довольно долгая, да и сам заряд летит не мгновенно, так что такая проверка ни к чему. Раз уж начала - пусть стреляет.

Не думаю, что стоит совсем уж убирать. Попробуй как у меня сделать может? И то, в эти три секунды они могут в стену стрелять, т.к. враг якобы все еще здесь…но это лучше, чем тупняк на месте. В большинстве случаев это выглядит как подавляющий огонь, что тоже здорово. Я у себя еще сделал рандом у солдат при occluded, 60% шанса кинуть грену и 30% range attack1. С этой новой проверкой этот рандом можно и убрать будет.

__________________
Мой мод на Xash

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

Старое сообщение 09-12-2020 12:01
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 908

Рейтинг



Насчёт прерываний анимаций атаки. Шедули атаки же прерываются ещё и условием bits_COND_NEW_ENEMY. По-моему, это тоже плохо. Монстр начинает анимацию, получает другого врага (который, допустим, во время проигрывания анимации оказался ближе, чем предыдущий) и анимация прерывается. А ведь враг может сменяться быстрее, чем проходит время анимации, соответственно монстр может вообще стоять и постоянно прерываться. Наверно было бы лучше, если б во время тасков атаки монстр не переключался на других врагов.

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

В общем, нужно ввести какую-то меру против частого переключения между противниками. Можно было бы вообще убрать прерывание по bits_COND_NEW_ENEMY для шедулей атак, но это может привести к ситуации, когда монстр с дистанционной атакой перестанет обращать внимание на противников, которые подошли ближе к нему и продолжать стрелять по врагу на расстоянии.

Цитата:
Aynekko писал:
Да тут вроде все понятно, через 15 секунд они восстанавливаются на позицию


Я сделал, чтоб они к последней известной позиции врага пытались пройти. Не забудь кстати эту переменную в save/restore добавить, а то я отдельным коммитом это поправил.
Ещё по идее надо подправить взаимодействие с PushEnemy и PopEnemy. В списке старых противников может оказаться тот же противник, что был и в m_hEnemy до того, как монстр о нём "забыл", и PopEnemy снова вытащит его же в качестве противника. Т.е. надо либо не допускать одновременного нахождения одного и того же монстра и в m_hEnemy и в m_hOldEnemy, либо вычищать его из списка при забывании.

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org

Отредактировано FreeSlave 10-12-2020 в 12:30

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

Старое сообщение 10-12-2020 12:28
- За что?
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



Цитата:
FreeSlave писал:
В общем, нужно ввести какую-то меру против частого переключения между противниками.

Надо пробовать завести массив врагов. Одного m_hEnemy явно недостаточно. m_hEnemies[MAX_ENEMIES]. И каким-то образом назначать им приоритет, как например weight у оружия. И считать этот приоритет, исходя из близости врага, его отношения к монстру, монстерстейта, в котором находится враг, какую атаку в данный момент враг выполняет... Короче много всего. Например, может быть отношение R_HATE или R_NEMESIS между хьюман грантами и алиен грантами. Хьюман грант в данный момент разбирается с зомби, который рядом с ним, и видит алиен гранта вдалеке. Из-за отношения переключается на него, не добивает зомби, у которого осталось 5 хп. Этот зомби валит хьюман гранта. А вот если считать приоритеты, тут уже можно сделать вариации: если у зомби мало хп, хьюман грант его добивает, и переключается на алиен гранта. Если у зомби хп много, то учитытвая, что алиен грант не враг зомби, хьюман грант сваливает за угол.

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

Старое сообщение 10-12-2020 14:07
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



Цитата:
Ku2zoff писал:
Надо пробовать завести массив врагов. Одного m_hEnemy явно недостаточно. m_hEnemies[MAX_ENEMIES]


C++ Source Code:
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 ];


И в коде монстра соответственно PushEnemy и PopEnemy. Скажи пожалуйста, почему я, который в коде монстров вообще не ковырялся, об этом в курсе, а ты, который уже много лет улучшает AI до сих пор об этом не знаешь. Мне прямо страшно что ты там мог натворить.

__________________
My Projects: download page

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

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

Старое сообщение 10-12-2020 14:19
-
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



Дядя Миша я об этом знаю, и ничего там не натворил. Но поведение монстров требует исправления. Push и Pop - не выход, т.к. монстр всегда оперирует только m_hEnemy. При bits_COND_NEW_ENEMY он благополучно пушает старого врага в память и творит неадекватщину, например перестаёт убегать в укрытие и получает по щщам от нового врага или от обоих сразу.

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

Старое сообщение 10-12-2020 14:27
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

__________________
My Projects: download page

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

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

Старое сообщение 10-12-2020 14:36
-
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



Для этого и нужны приоритеты. Можно модифицировать старую систему, чтобы при определённых условиях монстр не отправлял m_hEnemy в список старых врагов. Я пока не знаю, как лучше поступить. Не хочется трогать стандартный код монстров. Заведу новый класс-наследник и буду работать с ним. Как раз у меня барник - первый кандидат на "поумнение". Посмотрим, что можно сделать. Я пока на это подзабил и сделал прикольную квестовую составляющую с предметами, которые надо носить в определённое место. Как только доработаю - вернусь к коду монстров.

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

Старое сообщение 10-12-2020 14:42
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 06:54. Новая тема    Ответить
Страницы (9): « 1 2 3 4 [5] 6 7 8 9 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Кажется, я починил DispatchAnimEvents
Досконально не тестировал
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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