Контроллеры кажись пришли в норму. С маззлфлешами все еще беда есть, да. На барника посмотрел, выстрелы местами кажутся резкими что ли, наверное это имеется в виду.
Мне лично эти немного резкие движения совсем не мешают, маззлфлеши, которые и раньше глючные были, я тоже не замечал, пока вы не сказали) В клиентском коде моделей я совсем не шарю, поэтому передам эстафету кому-нибудь другому. Могу лишь сказать, как поступил бы я. Отлавливал бы клиентские ивенты на сервере (где они теперь отлавливаются хорошо) и отправлял бы какую-нибудь мессагу, которая и рисовала бы маззлфлеш на клиенте. Могу ради эксперимента так сегодня сделать
__________________ Никогда не поздно сделать мод под хл1
Sigurth писал: Мне лично эти немного резкие движения совсем не мешают
m_fSequenceFinished иногда выставляется в TRUE раньше конца анимации, скорее всего. Дёрганье выглядит некрасиво.
Цитата:
Sigurth писал: Отлавливал бы клиентские ивенты на сервере (где они теперь отлавливаются хорошо) и отправлял бы какую-нибудь мессагу, которая и рисовала бы маззлфлеш на клиенте.
Костыль. Лучше вынести из движка в клиентку содержимое IEngineStudio.StudioClientEvents, и заменить вызов этой функции на свою, которая будет корректно работать.
Добавлено 31-03-2021 в 11:02:
Цитата:
Sigurth писал: В клиентском коде моделей я совсем не шарю, поэтому передам эстафету кому-нибудь другому.
Когда выложишь код серверной части, я посмотрю, что ты там изменил, и попробую покумекать. Не трогай клиентскую часть, допиливай то, чем занимаешься. Результат хороший - монстры уже не протупливают на сменах активностей.
Добавлено 31-03-2021 в 11:11:
Насчёт маззлфлешей. Не видно только спрайта. Длайт рисуется при каждом вызове. Или это pev->effects =| EF_MUZZLEFLASH, что создаёт елайт. Надо проверить. Клиентских эвентов немного: 5001, 5011, 5021, 5031 для маззлфлешей, 5002 для искр и 5004 для звуков. Проще всего декомпильнуть модель, поменять проблемный эвент на другие, и проверить, в отлове эвентов дело, или в чём-то другом.
Добавлено 31-03-2021 в 12:56:
Сделал StudioClientEvents в дллке. Действительно, проблема только со спрайтами маззлфлешей. Клиентские елайты создаются. Причём, маззлфлеши проскакивают и на дллках со стандартным кодом отлова эвентов, как серверных, так и клиентских. Кажется, эта проблема наблюдается ещё и у Aynekko в ксашмоде. Значит, дело во времени жизни маззлфлешей: они появляются в самом конце кадра и не успевают толком отрисоваться, т.к. в начале следующего исчезают. Ничего не нужно тащить в клиент, достаточно просто заменить gEngfuncs.pEfxAPI->R_MuzzleFlash на gEngfuncs.pEfxAPI->R_TempSprite с увеличенным временем жизни до 0.05, например.
Ku2zoff писал: Кажется, эта проблема наблюдается ещё и у Aynekko в ксашмоде
Там решил тем, что я в движке у маззлфлеша поставил die=0.05, а было 0.01. Не знаю, есть ли в коде халфы возможность отредактировать эти функции. В параное 2 стоит 0.015 к примеру.
Только спрайт все еще не крепится к аттачменту, а просто спавнится там, где был аттачмент, поэтому отстает, и при увеличенном времени это заметно. По-хорошему всю систему маззлфлешей вообще надо как-то переделать...но это уже другая история.
Aynekko писал: По-хорошему всю систему маззлфлешей вообще надо как-то переделать...но это уже другая история.
Дело вообще в темпэнтитях, а не только в маззлфлешах. Я подменил вызов вспышки вызовом искр. Проскакивать стало реже. А вот когда подменил вызовом короткого звука, услышал, что иногда тишина, а иногда эхо, звук двоит или троит. Короче, придётся крутить интервалы отлова эвентов и на клиенте тоже.
Ku2zoff писал: Лучше вынести из движка в клиентку содержимое IEngineStudio.StudioClientEvents, и заменить вызов этой функции на свою, которая будет корректно работать.
Дело в том, что выносить нужно не только это. Я редактировал не одну функцию на сервере, чтобы все работало, как работает сейчас, очень долго боролся с правильным местом для m_fSequenceFinished, из-за чего у меня и не работали контроллеры. Попробовал свой костыль с мессагами. Ни один маззлфлеш не проскакивает, все отображаются, правда не знаю как правильно считывать аттачмент, либо рисуются в оригине модели, либо вообще где-то над дулом. Я так и быть, трогать клиентскую часть не буду, чтобы не наплодить багов. Сегодня- завтра ждите исходники серверной длл и мини-тутор с пояснениями, если еще баги не найдутся на сервере
Добавлено 31-03-2021 в 15:16:
Цитата:
Ku2zoff писал: Действительно, проблема только со спрайтами маззлфлешей. Клиентские елайты создаются
Нет, со спрайтами все ОК, а елайты создаются из-за pev->effects |= EF_MUZZLEFLASH; Проблема в клиентском отлове ивентов
__________________ Никогда не поздно сделать мод под хл1
Дядя Миша писал: Его установку в TRUE надо вообще выбросить из DispatchAnimEvents
Уже сделано, он у меня устанавливается только в StudioFrameAdvance. Но я там вообще порядок вызова этих функций поменял немного, короче все увидите чуть позже.
Цитата:
Дядя Миша писал: на клиенте нет проблемы отлова событий
Значит проблема не в отлове, а в том, что на клиенте сам кадр в ивентом просто проскакивает каким-то образом. Может, съедается интерполяцией (не кидайте тапками, если сморозил бред). Не знаю, я с клиентской частью моделей плохо дружу, просто предполагаю. Просто если сделать костыль с отловом клиентских ивентов на сервере и посыланием их мессагами в клиент, то все маззлфлеши рисуются без исключений, и рисуются в нужное время, и я бы так и оставил такой способ у себя, если бы смог правильно рассчитать позицию аттачмента.
__________________ Никогда не поздно сделать мод под хл1
Sigurth писал: Значит проблема не в отлове, а в том, что на клиенте сам кадр в ивентом просто проскакивает каким-то образом.
Проигрывается только один раз. Допустим, грант стреляет из дробовика 8 раз. При первом выстреле эвент играется, при последующих нет, если серия не будет прервана другой анимацией - пинком или перезарядкой. Перестают ловиться нулевой и первый кадры на клиентской стороне. Если отредактировать модель - всё становится хорошо.
Добавлено 31-03-2021 в 23:34:
Хотя, может проиграться и два раза. В первые пару секунд после загрузки сейва, когда игра немножко "лагает". Наверное, чем выше фпс у анимации, тем больше будет пропущено кадров в её начале.
Раз тут про ИИ идет разговор тоже, сейчас обнаружил у солдат одну штуку, которая сильно уберет у них тупняк. В Task_t tlGruntRangeAttack1B[] нужно закомментить
и таким образом они больше не стоят 2 секунды глядя на игрока, как баран на новые ворота, а начинают стрелять прям тут же. Если игрок за углом, то солдат начинает стрелять, только лишь показавшись из-за угла. Вот думаю пока, чтобы такое подсунуть туда вместо этого акта, чтобы ожидание было пол-секунды, а не две-три.
В атаке 1А стоит ACT_CROUCH - солдат сначала приседает. Ну тут ладно.
C++ Source Code:
{ TASK_WAIT, (float)0.1 },
хорошо срабатывает, почти то, что надо. Можно попробовать задрать фпс анимации combatidle еще. Пока она не проиграется, солдат стрелять не будет.