LagCompensation: 2nd try untested

This commit is contained in:
BotoX 2019-10-02 12:22:35 +02:00
parent 70066ed5ec
commit 12cd9a3128
1 changed files with 15 additions and 11 deletions

View File

@ -17,6 +17,7 @@ public Plugin myinfo =
}; };
bool g_bLateLoad = false; bool g_bLateLoad = false;
bool g_bBlockPhysics = false;
bool g_bNoPhysics[2048]; bool g_bNoPhysics[2048];
#define MAX_RECORDS 64 #define MAX_RECORDS 64
@ -24,11 +25,8 @@ bool g_bNoPhysics[2048];
enum struct LagRecord enum struct LagRecord
{ {
int fFlags;
float vecOrigin[3]; float vecOrigin[3];
float vecAngles[3]; float vecAngles[3];
float vecMins[3];
float vecMaxs[3];
float flSimulationTime; float flSimulationTime;
} }
@ -99,6 +97,9 @@ public void OnPluginStart()
public MRESReturn Detour_OnPhysicsTouchTriggers(int entity, Handle hReturn, Handle hParams) public MRESReturn Detour_OnPhysicsTouchTriggers(int entity, Handle hReturn, Handle hParams)
{ {
if(!g_bBlockPhysics)
return MRES_Ignored;
if(entity < 0 || entity > sizeof(g_bNoPhysics)) if(entity < 0 || entity > sizeof(g_bNoPhysics))
return MRES_Ignored; return MRES_Ignored;
@ -165,6 +166,10 @@ public void OnRunThinkFunctions(bool simulating)
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
{ {
g_bBlockPhysics = true;
if(!IsPlayerAlive(client))
return Plugin_Continue;
int delta = GetGameTickCount() - tickcount; int delta = GetGameTickCount() - tickcount;
if(delta < 0) if(delta < 0)
delta = 0; delta = 0;
@ -189,7 +194,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
if(iRecordIndex < 0) if(iRecordIndex < 0)
iRecordIndex += MAX_RECORDS; iRecordIndex += MAX_RECORDS;
RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, g_aaLagRecords[i][iRecordIndex]); RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, client, g_aaLagRecords[i][iRecordIndex]);
g_aEntityLagData[i].bRestore = true; g_aEntityLagData[i].bRestore = true;
#if defined DEBUG #if defined DEBUG
@ -220,7 +225,7 @@ public void OnRunThinkFunctions2()
continue; continue;
} }
RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, g_aEntityLagData[i].RestoreData); RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, 0, g_aEntityLagData[i].RestoreData);
g_aEntityLagData[i].bRestore = false; g_aEntityLagData[i].bRestore = false;
#if defined DEBUG #if defined DEBUG
@ -232,6 +237,7 @@ public void OnRunThinkFunctions2()
); );
#endif #endif
} }
g_bBlockPhysics = false;
} }
public void OnRunThinkFunctionsPost(bool simulating) public void OnRunThinkFunctionsPost(bool simulating)
@ -274,17 +280,15 @@ void RecordDataIntoRecord(int iEntity, LagRecord Record)
{ {
GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", Record.vecOrigin); GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", Record.vecOrigin);
GetEntPropVector(iEntity, Prop_Data, "m_angAbsRotation", Record.vecAngles); GetEntPropVector(iEntity, Prop_Data, "m_angAbsRotation", Record.vecAngles);
GetEntPropVector(iEntity, Prop_Data, "m_vecMins", Record.vecMins);
GetEntPropVector(iEntity, Prop_Data, "m_vecMaxs", Record.vecMaxs);
Record.flSimulationTime = GetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime"); Record.flSimulationTime = GetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime");
} }
void RestoreEntityFromRecord(int iEntity, LagRecord Record) void RestoreEntityFromRecord(int iEntity, int iFilter, LagRecord Record)
{ {
SDKCall(g_hSetLocalOrigin, iEntity, Record.vecOrigin); FilterTriggerMoved(iFilter);
SDKCall(g_hSetLocalAngles, iEntity, Record.vecAngles);
SDKCall(g_hSetCollisionBounds, iEntity, Record.vecMins, Record.vecMaxs);
SetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime", Record.flSimulationTime); SetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime", Record.flSimulationTime);
TeleportEntity(iEntity, Record.vecOrigin, Record.vecAngles, NULL_VECTOR);
FilterTriggerMoved(-1);
} }
bool AddEntityForLagCompensation(int iEntity) bool AddEntityForLagCompensation(int iEntity)