inital antiping percent commit{

This commit is contained in:
JSaurusRex 2024-05-18 18:31:21 +02:00
parent fcacef5fbb
commit ba9ba69d1e
2 changed files with 28 additions and 5 deletions

View file

@ -14,6 +14,7 @@
MACRO_CONFIG_INT(ClPredict, cl_predict, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict client movements")
MACRO_CONFIG_INT(ClPredictDummy, cl_predict_dummy, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict dummy movements")
MACRO_CONFIG_INT(ClAntiPingLimit, cl_antiping_limit, 0, 0, 200, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Antiping limit (0 to disable)")
MACRO_CONFIG_INT(ClAntiPingPercent, cl_antiping_percent, 100, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "how far ahead Antiping predicts")
MACRO_CONFIG_INT(ClAntiPing, cl_antiping, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Enable antiping, i. e. more aggressive prediction.")
MACRO_CONFIG_INT(ClAntiPingPlayers, cl_antiping_players, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict other player's movement more aggressively (only enabled if cl_antiping is set to 1)")
MACRO_CONFIG_INT(ClAntiPingGrenade, cl_antiping_grenade, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict grenades (only enabled if cl_antiping is set to 1)")

View file

@ -2013,17 +2013,30 @@ void CGameClient::OnPredict()
if(PredictDummy())
pDummyChar = m_PredictedWorld.GetCharacterById(m_PredictedDummyId);
float predictPercentage = 1 - g_Config.m_ClAntiPingPercent / 100.0;
int predictTick = Client()->GetPredictionTime() * Client()->GameTickSpeed() / 1000.0;
predictTick = Client()->PredGameTick(g_Config.m_ClDummy) - floor(predictTick * predictPercentage);
// predict
for(int Tick = Client()->GameTick(g_Config.m_ClDummy) + 1; Tick <= Client()->PredGameTick(g_Config.m_ClDummy); Tick++)
{
// fetch the previous characters
if(Tick == predictTick)
{
for(int i = 0; i < MAX_CLIENTS; i++)
if(CCharacter *pChar = m_PredictedWorld.GetCharacterById(i))
m_aClients[i].m_PrevPredicted = pChar->GetCore();
}
if(Tick == Client()->PredGameTick(g_Config.m_ClDummy))
{
m_PrevPredictedWorld.CopyWorld(&m_PredictedWorld);
m_PredictedPrevChar = pLocalChar->GetCore();
for(int i = 0; i < MAX_CLIENTS; i++)
if(CCharacter *pChar = m_PredictedWorld.GetCharacterById(i))
m_aClients[i].m_PrevPredicted = pChar->GetCore();
m_aClients[m_Snap.m_LocalClientId].m_PrevPredicted = pLocalChar->GetCore();
if(pDummyChar)
m_aClients[m_PredictedDummyId].m_PrevPredicted = pDummyChar->GetCore();
}
// optionally allow some movement in freeze by not predicting freeze the last one to two ticks
@ -2049,14 +2062,23 @@ void CGameClient::OnPredict()
m_PredictedWorld.Tick();
// fetch the current characters
if(Tick == Client()->PredGameTick(g_Config.m_ClDummy))
// if(Tick == Client()->PredGameTick(g_Config.m_ClDummy) ||
if(Tick == predictTick)
{
m_PredictedChar = pLocalChar->GetCore();
for(int i = 0; i < MAX_CLIENTS; i++)
if(CCharacter *pChar = m_PredictedWorld.GetCharacterById(i))
m_aClients[i].m_Predicted = pChar->GetCore();
}
if(Tick == Client()->PredGameTick(g_Config.m_ClDummy))
{
m_PredictedChar = pLocalChar->GetCore();
m_aClients[m_Snap.m_LocalClientId].m_Predicted = pLocalChar->GetCore();
if(pDummyChar)
m_aClients[m_PredictedDummyId].m_Predicted = pDummyChar->GetCore();
}
for(int i = 0; i < MAX_CLIENTS; i++)
if(CCharacter *pChar = m_PredictedWorld.GetCharacterById(i))
{