mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-19 09:12:19 +00:00
inital antiping percent commit{
This commit is contained in:
parent
fcacef5fbb
commit
ba9ba69d1e
|
@ -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)")
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue