cl_lw - cl local weapons. Как раз таки включает и выключает локальные (клиентские) пушки. Правда, не совсем корректно. У Дяди Миши есть тутор Xash Weapon System. Там он сначала заводит динамический корректно отключаемый предиктинг. А потом и вовсе от него избавляется.
Цитата:
илья2 писал: все равно мне кажется лучше его убрать
Единственная явная проблема в сингле из-за предиктинга - неработающая после смены уровня перезарядка. Лечится вызовом TabulateAmmo после рестора игрока. Есть такой пуллреквест на гитхабе в репе валвэ. Вторая проблема - более долгие загрузки уровней, но разница в 2-3 секунды некритична. Вот третья проблема достаточно нехорошая, и связана она с вьюмоделями пушек.
На клиент нужно передавать информацию о бодигруппах и скинах, чтобы читать её в файле hl_weapons.cpp, и учитывать. Ещё, на сервере, пушки работают как минимум из двух мест: PlayerPrethink и PlayerPostthink. А где-то между ними по времени происходит вызов кадра игровой физики. Если, например, попытаться сделать анимацию Holster, не отключив локальные (клиентские анимации), можно получить моргание вьюмодели. Потому что на сервере есть чёткое разграничение вызовов для m_pActiveItem, m_pNextItem, m_pLastItem. А вот на клиенте вся бражка вызывается из HUD_WeaponsPostThink, то есть в конце кадра. Получается, нельзя чётко разделить предыдущую и следующую пушку, не переписав всю клиентскую часть предиктинга. Отсюда получаются моргающие анимации.
Потому что отправлена была на клиент анимация, например, №3, что у текущей пушки Holster. Она проигралась. Пушка сменилась на следующую, и тут же проиграла свою анимацию №3. А у этой пушки это может быть Shoot. И только после этого, новая пушка проиграет Draw. Я забарывал эту пакость через вставку return в блоке с условием if ( cmd->weaponselect && ( player.pev->deadflag != ( DEAD_DISCARDBODY + 1 ) ) ). Но, как по мне, это не очень хорошее решение. Лучше завести по аналогии с сервером HUD_WeaponsPreThink, и вызывать откуда-то из HUD_Frame. Может быть, когда нибудь заморочусь этим.
А тебе советую просто вырезать предиктинг по тутору Дяди Миши, если хочешь.
Ku2zoff писал: Получается, нельзя чётко разделить предыдущую и следующую пушку, не переписав всю клиентскую часть предиктинга. Отсюда получаются моргающие анимации.
Сегодня шышки особенно забористые!
Моргает эта зараза из-за того, что у пушек первая анимация обычно idle.
Сперва приходит команда для CL_LoadModel. Ставится пушка и сразу начинает играть анимацию idle. На следующем кадре приходит команда Deploy и пушка начинает подыматься. Выглядит как моргание. Иногда обе команды проходят на одном кадре, иногда нет.
А тебе советую просто вырезать предиктинг по тутору Дяди Миши, если хочешь. Как раз этим я и хочу заняться
и кстати ещё один факт если поставить cl_lw 0 то точность у глока почему то выше чем у cl_lw 1 это баг такой если баг то это круто
Добавлено 12-04-2020 в 15:10:
Моргает эта зараза из-за того, что у пушек первая анимация обычно idle.
Сперва приходит команда для CL_LoadModel. Ставится пушка и сразу начинает играть анимацию idle. На следующем кадре приходит команда Deploy и пушка начинает подыматься. Выглядит как моргание. Иногда обе команды проходят на одном кадре, иногда нет.
Дядя Миша писал: Иногда обе команды проходят на одном кадре, иногда нет.
Ну вот отсюда и оно. А ты про шишки Если бы они всегда проходили на одном кадре, то "моргания" бы не было. А то, что появление моргания зависит от того, что не совпадают номера анимаций, я предположил, сравнив некоторые модели. И моргания нет в тех случаях, когда Holster предыдущей пушки имеет тот же номер, что и Draw предыдущей.
илья2 писал: точность реально изменяется при cl_lw 1 и 0 можете даже проверить на
cs 1.6 ну если кому интересно и не знает об этом
Несовпадение клиентской и серверной трассы, как пишет KiQ. По факту, трасса всегда серверная, т.к. попадания считаются именно на сервере. Клиентская часть - всего лишь зеркало для предиктинга. FireBulletsPlayer и EV_HLDM_FireBullets синхронизируются через параметр m_pPlayer->pev->random_seed. Или как-то так, дословно не помню. Особенно заметно на примере шотгана в халфе: если и на сервере и на клиенте сделать одинаковый разброс, но без синхронизации, то серверные и клиентские декали совпадать не будут. Наверное, в кс 1.6 допущён такой ляп.
Добавлено 12-04-2020 в 22:06:
Так что никакого бага точности нет. Просто визуальная, косметическая часть отличается от физической, реальной. Что интересно, в оригинальной халфе такого нет. Декали шотгана (клиентские) совпадают со спрайтами крови (серверными). Это надо очень намудрить, чтобы получить сильное расхождение.