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

Дата регистрации: Mar 2017
Проживает: Электросталь
Сообщений: 55
Возраст: 33

Рейтинг



Ну который FreeSlave здесь написал или это просто пример.

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

Старое сообщение 02-12-2020 13:57
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Next Day это вполне рабочий код. Первый блок можно в monsters.cpp, не забыв сделать декларацию этой функции в классе CBaseMonster. Второй в schedule.cpp, в какой-нибудь таск из TASK_FIND_COVER_FROM_ENEMY, TASK_FIND_COVER_FROM_ORIGIN, TASK_FIND_COVER_FROM_BEST_SOUND в функции CBaseMonster :: StartTask.

Отредактировано Ku2zoff 02-12-2020 в 14:13

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

Старое сообщение 02-12-2020 14:04
- За что?
Next Day
Частый гость

Дата регистрации: Mar 2017
Проживает: Электросталь
Сообщений: 55
Возраст: 33

Рейтинг



Спасибо теперь мне более понятно.

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

Старое сообщение 02-12-2020 14:13
- За что?
KorteZZ
Lambda

Дата регистрации: Oct 2009
Проживает: Mongolia
Сообщений: 377
Возраст: 35

Рейтинг



Уау, круто!

__________________

Killing Floor: Horzine Outbreak

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

Старое сообщение 02-12-2020 18:20
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Цитата:
Aynekko писал:
гранты с дробовиками стали очень быстро стрелять

А ты убрал обе строчки с m_fSequenceFinished из DispatchAnimEvents? После внесения изменений на манер сорса, они не нужны там, т.к. должны корректно выставляться в StudioFrameAdvance и ResetSequenceInfo.

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

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

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

Рейтинг



Цитата:
Ku2zoff писал:
А ты убрал обе строчки с m_fSequenceFinished из DispatchAnimEvents? После внесения изменений на манер сорса, они не нужны там, т.к. должны корректно выставляться в StudioFrameAdvance и ResetSequenceInfo.

Благодарю. Теперь как надо. Сейчас потестил, у меня гранты друг против друга выставлены по поведению, один пробегал мимо другого и тот успел его пнуть ногой. Никогда такого не видел.

__________________
Мой мод на Xash

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

Старое сообщение 02-12-2020 19:07
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Немного поясню, если вдруг непонятно, что за интервал проверки эвентов такой, от flStart до flEnd.
Есть pev->frame. Это не конкретный кадр в анимации, которых может быть от 1 до лимита, поддерживаемого движком и форматом моделей. Это диапазон от первого кадра до последнего, для удобства приведённый к определённому максимальному значению. В сорсе это 0 - 1, в голдсорсе 0 - 255. Соответственно, когда диапазон меньше минимума или больше максимума - m_fSequenceFinished = TRUE.
DispatchAnimEvents вызывает GetAnimationEvent внутри этого диапазона, эвент ищется с позиции flStart по позицию flEnd. В сорсовском варианте рассинхронов нет, т.к. значения позиций берутся непосредственно из анимации. А вот в голдсорсовском происходит шняга, потому что значения зачем-то доумножаются на gpGlobals->time и зависящую от неё pev->animtime.
Изначально, похоже, вальвовцы не хотели втыкать m_fSequenceFinished в StudioFrameAdvance, о чём говорит коммент, оставленный в этой функции. Но так как даже двойная проверка не помогла, пришлось использовать flInterval (совпадающий с частотой тчинка понстров), чтобы эвенты не проскакивали. Это также не спасло ситуацию, т.к. GetAnimationEvent в этом случае всё равно может срабатывать не вовремя.

Отредактировано Ku2zoff 02-12-2020 в 20:05

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

Старое сообщение 02-12-2020 20:02
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Ku2zoff тебе уже пора заводить свой блог разработчика

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 02-12-2020 20:42
-
Aynekko
Маппер

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

Рейтинг



Барник стал тупить у меня. Именно из-за этих изменений с анимациями.
Ситуация: стоит барник в режиме idle, я с ноуклипом и ноутаргетом спавню гранта впереди и справа от барника. Грант спавнится спиной к барнику и не видит его. Барник поворачивается к монстру, и...его зацикливает и не отпускает. Просто стоит и дрожит.
Я нажимаю на барника, его отпускает и он начинает стрелять.

Откатил изменения и больше такое не повторяется.
Я в этом мало что понимаю, поэтому не знаю, с чего может быть связано, просто решил поделиться.

__________________
Мой мод на Xash

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

Старое сообщение 02-12-2020 21:49
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Цитата:
Aynekko писал:
его зацикливает и не отпускает. Просто стоит и дрожит.
Я нажимаю на барника, его отпускает и он начинает стрелять.

Это там где-то в GetSchedule проблема, раз после того, как поюзаешь, он очухивается - щедъюль принудительно изменяется. Почему-то он не может сделать SCHED_ARM_WEAPON, или как там это называется, когда достаёт пистолет. Ты на чистом ксашмоде делаешь, никаких изменений в монстров не вносил? Там "спаунер" для НПС есть, чтобы я смог проверить? Ситуация всегда одинаковая, в каком бы состоянии барник не был до спавна гранта? Думаю, что под халфой это может не проявиться, но всё равно попробую повторить ситуацию. И карту напиши, на которой проверяешь, стандартная или своя.
Видео записать можешь?

Добавлено 03-12-2020 в 06:23:

И есть какая ругань в консоли? Что в лог пишется?

Добавлено 03-12-2020 в 06:35:

Цитата:
Дядя Миша писал:
тебе уже пора заводить свой блог разработчика

Разве что писать мысли вслух. Кое в чём я начинаю понимать и разбираться, а кое-что упускаю из виду. Будем тут в теме совместно с заинтересованными кумекать, поди чего сообразим.
К примеру, позавчера я тестировал новые добавленные щедъюли барника - ближний бой, перезарядку, прятки с врагами. Ну и короче понял, что перезарядка в идеале должна быть как у гранта - убежал, перезарядился. Не смог убежать - просто перезарядился. Сделал. Не может убежать, начинает перезаряжаться, его убивают.
Помозговал, поменял несколько условий, получил идеальный результат: кончились патроны, пытается убежать и перезарядиться. Не может убежать - перезаряжается на месте. Если враг подошёл слишком близко, то не перезаряжается, а бьёт его пистолетом. Это касаемо перезарядки. Касаемо подхода близко - если у врага здоровье больше 30, то барник в любом случае от него валит, если может. А вот если меньше 30, то он его бьёт, потому что завалит за два удара (примерно 2 секунды).
Насчёт DispatchAnimEvents я прям ХЗ. У себя проблем не заметил: и скрипты проверял, и просто работу AI. Надо бы конечно полностью пройти халфу с этим изменением и убедиться, что всё хорошо. Проблема в том, что времени жалко.

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

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

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

Рейтинг



Тут вот какая странность. У меня у барника заменная модель.
Я поставил родную модель и бага нет. С моей моделью и твоим кодом баг проявился 2 раза из трех. С родной - ни разу из 4-ех раз (условия идеальные - стоящий барник, рядом монстермейкер, который я активирую - больше на карте никого (плоская площадка с колоннами, ноды есть).
Может что-то не так с самой анимацией draw?

Добавлено 03-12-2020 в 08:51:

Я свою модель чуть редактировал, поэтому нашел оригинал и проверил. С ней тоже этот баг есть. Прикрепляю.

Добавлено 03-12-2020 в 08:53:

И вот как у меня сделана карта. Монстермейкер и барник.
Находясь в ноутаргете, активирую монстремейкер через консоль.
https://drive.google.com/file/d/1ru...iew?usp=sharing

Вложение: model.zip (429.8 кб)
Этот файл был скачан 174 раз.

__________________
Мой мод на Xash

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

Старое сообщение 03-12-2020 05:53
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Я сейчас воспроизведу условия. А ты удалил flInterval = 0.1 из DispatchAnimEvents? Оно тоже не нужно после внесения изменений.

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

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

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

Рейтинг



Ага, скорее всего не удалил с работы вернусь, проверю

__________________
Мой мод на Xash

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

Старое сообщение 03-12-2020 07:50
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Aynekko ну что сказать. У меня с твоей моделью баг периодически проявляется. Пользуясь методом Дяди Миши (читай, используя пролетарское чутьё), я сразу понял, что что-то с перехватом эвентов у конкретной анимации, потому что модель весьма самопальная, аж из Азур Шипа. Что выяснилось: в модели две анимации с активностью ACT_ARM - draw и draw_as. Так вот, с некоторой вероятностью иногда играется вторая, т.к. она дальше по списку. Я сразу же закомментил первую, чтобы всегда игралась вторая, и баг стал воспроизводиться в 100% случаев.
Оказалось, что эвент 2 (BARNEY_AE_DRAW), отвечающий за смену переменной m_fGunDrawn у барника, в этой анимации поставлен на последний, 15-й кадр. И он просто не выхватывается новым кодом. Переставил на 14-й, и всё заработало. Значит, надо либо убрать вторую анимацию, либо изменить кадр эвента, либо ковырять код и выяснять, почему такое происходит.
Надо бы проверить все стандартные халфовские модели, которые использованы в игре. Если хотя бы у одной есть анимация с вызовом эвента на последнем кадре, тогда надо править код. Если нет - просто в своих моделях не ставить ничего на последний кадр.

Добавлено 03-12-2020 в 18:16:

Итак, что выяснилось. Эвенты, поставленные на первый (0) кадр, проскакивают как в оригинале, так и с новым кодом, но не всегда. Например, хедкрабы вполне кусают игрока. А вот выстрелы у грантов срабатывают не всегда. Эвенты на последнем кадре (если кадров в анимации 10, то его номер 9, т.к. отсчёт идёт с 0) в оригинале срабатывают, в новом коде - нет. Меня терзают смутные сомнения, что и в оригинале эвенты на последнем кадре могут проскакивать. Скорее всего, это всё зависит от попадания GetAnimationEvent в момент тчинка монстра. Единственная здравая мысль, которая приходит в голову, это не располагать эвенты на первом и последнем кадрах. А это влечёт за собой переделку некоторых моделей, где есть эвенты на нулевом кадре, чтобы потенциально избежать несрабатываний.

Добавлено 03-12-2020 в 18:35:

Собсно, в коде GetAnimationEvent условие игнорирует последний кадр в случае нелупленных анимаций:

C++ Source Code:
if ( (pevent[index].frame >= flStart && pevent[index].frame < flEnd) ||
  ((pseqdesc->flags & STUDIO_LOOPING) && flEnd >= pseqdesc->numframes - 1 && pevent[index].frame < flEnd - pseqdesc->numframes + 1) )

А в случае лупленых вообще какая-то чушь с прибалением и убавлением кадров анимации. Гораздо нагляднее код из сорса:
C++ Source Code:
1
bool bOverlapEvent = false;
2
 
3
if (pevent[index].cycle >= flStart && pevent[index].cycle < flEnd)
4
{
5
  bOverlapEvent = true;
6
}
7
// FIXME: doesn't work with animations being played in reverse
8
else if ((pseqdesc->flags & STUDIO_LOOPING) && flEnd < flStart)
9
{
10
  if (pevent[index].cycle >= flStart || pevent[index].cycle < flEnd)
11
  {
12
    bOverlapEvent = true;
13
  }
14
}
Но с ним первый кадр тоже вроде иногда проскакивает. Буду проверять.

Отредактировано Ku2zoff 03-12-2020 в 11:36

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

Старое сообщение 03-12-2020 11:35
- За что?
KorteZZ
Lambda

Дата регистрации: Oct 2009
Проживает: Mongolia
Сообщений: 377
Возраст: 35

Рейтинг



Блин, классные вещи вы делаете. Тут можно серию туторов сделать как для голды, так и для ксаша. Для мододелов было бы круто иметь продвинутых нпс. Я для себя вот про адекватных зомбачелло мечтаю)
Надеюсь, и их прокачаете

__________________

Killing Floor: Horzine Outbreak

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

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



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


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

Временная зона GMT. Текущее время 04:11. Новая тема    Ответить
Страницы (10): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
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 - 2024