Гайд [Information] CLagCompensationManager::StartLagCompensation & void CLagCompensationManager::RecordDataIntoTrack

Забаненный
Статус
Оффлайн
Регистрация
18 Дек 2022
Сообщения
16
Реакции[?]
5
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
hello everybody
this thread was created in order to understand in more detail the work of the CLagCompensationManager::StartLagCompensation and void CLagCompensationManager::RecordDataIntoTrack function but we will parse only IsValidTick
===========================================================================================================
okay, let's go to leaked csgo source and to the ida too
Пожалуйста, авторизуйтесь для просмотра ссылки.
u can look this check prevents backtracking for more than 200ms also you can increase the backtrack with a fake latency ( but u need clamp fake latency in their correct )
example:
C++:
// get fake latency
auto in_latency = nci->get_latency( FLOW_IN );

// get real latency
auto out_latency = nci->get_latency( FLOW_OUT );

// check bounds
// sub_1007F9D0 is this C_BaseEntity::GetInterpolationAmount()
correct = std::clamp( out_latency + in_latency + sub_1007F9D0( ) );
 
// calculate difference between tick sent by player and our latency based tick
auto delta_time = correct = ( GlobalVas->curtime - simulation_time );

if ( fabsf( delta_time ) > 0.2 )
    return 0;

// dead time check
// if tail is within limits, stop
int flDeadTime = GlobalVas->curtime - sv_maxunlag->GetFloat( );
return ( simulation_time >= ( float )flDeadTime );
also pseudo code from CLagCompensationManager::RecordDataIntoTrack

C++:
v5 = *(float *)(GlobalVas + 16) - v22;    // flDeadtime
v6 = (signed int)v5;                              // ( int )flDeadtime
  while ( 1 )
{
    v7 = a3[4];
    if ( !v7 || *(_DWORD *)(v7 + 400) == v7 && *(_DWORD *)(v7 + 404) != v7 )
      break;
    v5 = *(float *)(v7 + 52);
    if ( v5 >= (float)v6 )
      break;
    sub_10319FF0(a3[4]);
}
but valve is this fucking retards and dead time check not need in ur IsValidTick function
i wait when valve fix this issue related to dead_time
P.S weather tickbase is supposed to be used here shouldnt really matter as i am testing on a local server and curtime and tickbase are identical (or maybe a few ms apart), also than u could only lagcomp a max of 200ms backwards from the curtime, and that sort of defeats the purpose of checking for fabsf(delta) > 0.2f + their correct with latency etc
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
Перевод, для самых маленьких:
Привет всем, этот пост был создан для того, чтобы более подробно разобраться в работе функции CLagCompensationManager::StartLagCompensation и CLagCompensationManager::RecordDataIntoTrack, но мы разбирём только IsValidTick
================================================== ================================================== =======
Для начала, давайте обратимся к слитому исходнику игры и к IDA
Ссылка на код этой функции и в игре:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Вы можете посмотреть, что эта проверка предотвращает бектрек более чем на 200 мс, также вы можете увеличить время бектрека спользуя FakePing (но вам нужно зафиксировать ложную задержку в их правильном)
Пример:
C++:
// get fake latency
auto in_latency = nci->get_latency( FLOW_IN );

// get real latency
auto out_latency = nci->get_latency( FLOW_OUT );

// check bounds
// sub_1007F9D0 is this C_BaseEntity::GetInterpolationAmount()
correct = std::clamp( out_latency + in_latency + sub_1007F9D0( ) );

// calculate difference between tick sent by player and our latency based tick
auto delta_time = correct = ( GlobalVas->curtime - simulation_time );

if ( fabsf( delta_time ) > 0.2 )
    return 0;

// dead time check
// if tail is within limits, stop
int flDeadTime = GlobalVas->curtime - sv_maxunlag->GetFloat( );
return ( simulation_time >= ( float )flDeadTime );
Также псевдокод из CLagCompensationManager::RecordDataIntoTrack:
C++:
v5 = *(float *)(GlobalVas + 16) - v22;    // flDeadtime
v6 = (signed int)v5;                              // ( int )flDeadtime
  while ( 1 )
{
    v7 = a3[4];
    if ( !v7 || *(_DWORD *)(v7 + 400) == v7 && *(_DWORD *)(v7 + 404) != v7 )
      break;
    v5 = *(float *)(v7 + 52);
    if ( v5 >= (float)v6 )
      break;
    sub_10319FF0(a3[4]);
}
Но т.к. Valve это контора пидарасов, то и эта проверка мертвого времени не нужна в вашей функции IsValidTick
я жду, когда Valve исправит эту проблему, связанную с dead_time
P.S. Предполагается, что здесь будет использоваться "тиковая база погоды"(я не понял что это значит), которая не имеет большого значения, так как я тестирую на локальном сервере, а curtime и тиковая база идентичны (или, может быть, с разницей в несколько мс), а также то, что вы можете получить бектрек максимум на 200 мс, и это противоречит цели проверки fabsf (дельта) > 0,2f + их правильность с задержкой и т. д.

прошу не бить меня посасижами, я просто перевёл
 
Пользователь
Статус
Оффлайн
Регистрация
20 Мар 2020
Сообщения
166
Реакции[?]
41
Поинты[?]
0
Я так понял что чек нa dead time убит нахуй у валв и его нет смысла использовать?
 
Забаненный
Статус
Оффлайн
Регистрация
18 Дек 2022
Сообщения
65
Реакции[?]
10
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я так понял что чек нa dead time убит нахуй у валв и его нет смысла использовать?
верно, так как валву похуй на всё, в том числе и на анимки, тикбазу, им просто легче залить апдейт с новыми скинами и получить дохуя бабок
 
Сверху Снизу