В очередной раз запиливая оружия для своего мода заметил одну интересную вещь: метод Primary/SecondaryAttack() на стороне клиента вызывается огромное количество раз, причем чем больше пинг - тем больше вызовов происходит.
Добавил такой код в соответствующую функцию:
C++ Source Code:
1
void CGlock::PrimaryAttack()
2
{
3
...
4
#ifdef CLIENT_DLL
5
ALERT(at_console, "glock fire %.4f\n", m_flNextPrimaryAttack);
6
#endif
7
...
8
}
После чего полез в консоль проверять, и получил примерно такие результаты:
C++ Source Code:
1
fakelag 0:
2
cl: glock fire -0.0010
3
4
fakelag 20:
5
cl: glock fire -0.0540
6
cl: glock fire -0.0410
7
cl: glock fire -0.0410
8
cl: glock fire -0.0280
9
cl: glock fire -0.0280
10
cl: glock fire -0.0150
11
cl: glock fire -0.0150
12
cl: glock fire -0.0010
13
cl: glock fire -0.0010
14
15
fakelag 80:
16
cl: glock fire -0.1610
17
cl: glock fire -0.1480
18
cl: glock fire -0.1480
19
cl: glock fire -0.1480
20
cl: glock fire -0.1480
21
cl: glock fire -0.1480
22
cl: glock fire -0.1210
23
cl: glock fire -0.1210
24
cl: glock fire -0.0940
25
cl: glock fire -0.0940
26
cl: glock fire -0.0810
27
cl: glock fire -0.0810
28
cl: glock fire -0.0680
29
cl: glock fire -0.0680
30
cl: glock fire -0.0680
31
cl: glock fire -0.0540
32
cl: glock fire -0.0540
33
cl: glock fire -0.0280
34
cl: glock fire -0.0280
35
cl: glock fire -0.0280
36
cl: glock fire -0.0010
37
cl: glock fire -0.0010
Из-за этого порой происходит так, что на стороне клиента вместо одного выстрела происходит два, так как дважды проигрывается ивент (вместо одной гильзы вылетает две, остаётся две декали на стене и т.п). Подобную проблему замечал почти во всех модах, так похоже тут корень проблемы лежит либо в движке, либо в коде предиктинга из HLSDK.
Конкретно в моём проекте это вызывает две проблемы:
1. Некорректно работает чередование ударов катаной, может два раза подряд ударить влево/вправо, но по идее оно должно всегда чередоваться.
2. Ломается последовательность ударов в рукопашном бою, из-за чего выполнение комбо не представляется возможным.
Тестировал это всё дело на последнем на данный момент стимовском билде голды (8245), а также на древнем билде 4554. В обоих билдах эта проблема проявляется совершенно одинаково.
Может кто-нибудь что-то знает об этом баге?
Ну в общем. На ванильном ксаше у меня не получилось запустить мод, потому что мод, к сожалению, основан на новом HLSDK, который с репозитория Valve на гитхабе. Решил проверить в FWGS - и тут уже все интереснее:
При fakelag 50 получился такой результат. Так что в форке по крайней мере баг никуда не делся.
flCreep = flTimeBetweenFires - m_flPrevPrimaryAttack; // postive or negative
Выглядит довольно крипово
К тому же мы этот баг с пушками с переменным успехом пытались починить:
1. на оригинальном HL SDK
2. в Ксаше
3. в Ксаше FWGS
Притом, что мне Альбатрос доказывал, что есть некотороые шероховатости с приёмом дельты и симуляцией предиктинга в оригинальном ксаше, но если их починить, то всё будет отлично. Но позвольте, я же прекрасно помню, как глючили клиентские пушки в оригинальном голдсорсе, когда никакого ксаша уже не было. Я даже в туторе про это дерьмо упоминал еще в 2004-м году.
Оно уже тогда всех доставало. И почему СолоКиллер говорит, что это якобы не для всех пушек помогает? База-то у них одна.