Внимание! При большом пинге клиента сервер производит дополнительную проверку (т .н. prediction), трассируя дополнительные линии, что делает данный метод неэффективным! Большинство "shot/bullet/shell/fire/trace/particle/projectile/etc" плагин-авторов вместо trace вектора пули/дробовой частицы используют вектор взора игрока. Так вот знайте, что разница угла между такими векторами может достигать значения, даже большего, чем 30 градусов! Причиной этому является т.н. "отдача" и "разброс". Правильно было бы "ловить" TraceLine, фильтровать "огневую" trace и получать ее вектор.
Вы также должны понимать, что некоторые оружия:
- довольно мощные, поэтому их пули могут последовательно поочереди "создавать" вторую и третью trace для первого и второго столкновения с каким-либо препятствием
- поддерживают т.н. "burst" огневой режим, поэтому в каждый момент атаки производится т.н. "мультивыстрел", т.е. несколько одиночных выстрелов с небольшой временной задержкой, каждый выстрел "выпускает" одну пулю
- поддерживают т.н. "дробовой" выстрел, так в каждый момент атаки производится одиночный выстрел, который "выпускает" группу "частиц", каждая из которых имеет свою trace, которые создаются последовательно
Данный скрипт показывает, как:
- "отфильтровать" "огневую" trace среди множества других trace
- распознать тип огневой trace: пуля или дробовая частица
- определить текущий номер дробовой частицы для текущего выстрела
- определить, куда попадает пуля/частица: world/brush или entity/игрок
- вычислить текущий "реальный" вектор пули/дробовой частицы
Примечение: Вы также можете просмотреть Fix Recoil плагин, который частично использует функциональность данного скрипта в упрощенном виде.