LagCompensation: stable

This commit is contained in:
BotoX 2019-10-16 15:18:09 +02:00
parent 7efd502829
commit 699deab40a
2 changed files with 19 additions and 102 deletions

View File

@ -4,12 +4,6 @@
{ {
"Signatures" "Signatures"
{ {
"CBaseEntity::PhysicsTouchTriggers"
{
"library" "server"
"linux" "@_ZN11CBaseEntity20PhysicsTouchTriggersEPK6Vector"
}
"::UTIL_Remove" "::UTIL_Remove"
{ {
"library" "server" "library" "server"
@ -22,12 +16,6 @@
"linux" "@_ZN12CCSGameRules12RestartRoundEv" "linux" "@_ZN12CCSGameRules12RestartRoundEv"
} }
"CBaseEntity::InvalidatePhysicsRecursive"
{
"library" "server"
"linux" "@_ZN11CBaseEntity26InvalidatePhysicsRecursiveEi"
}
"GetAbsOrigin" "GetAbsOrigin"
{ {
"library" "server" "library" "server"
@ -40,21 +28,6 @@
"linux" "@_ZN11CBaseEntity12SetAbsOriginERK6Vector" "linux" "@_ZN11CBaseEntity12SetAbsOriginERK6Vector"
} }
// CBaseEntity::GetAbsAngles is inlined
// so we use CBaseEntity::EyeAngles
// which does -> return GetAbsAngles();
"GetAbsAngles"
{
"library" "server"
"linux" "@_ZN11CBaseEntity9EyeAnglesEv"
}
"SetAbsAngles"
{
"library" "server"
"linux" "@_ZN11CBaseEntity12SetAbsAnglesERK6QAngle"
}
"SetLocalAngles" "SetLocalAngles"
{ {
"library" "server" "library" "server"
@ -64,21 +37,6 @@
"Functions" "Functions"
{ {
"CBaseEntity__PhysicsTouchTriggers"
{
"signature" "CBaseEntity::PhysicsTouchTriggers"
"callconv" "thiscall"
"return" "void"
"this" "entity"
"arguments"
{
"pPrevAbsOrigin"
{
"type" "vectorptr"
}
}
}
"UTIL_Remove" "UTIL_Remove"
{ {
"signature" "::UTIL_Remove" "signature" "::UTIL_Remove"
@ -100,21 +58,6 @@
"return" "void" "return" "void"
"this" "ignore" "this" "ignore"
} }
"CBaseEntity__InvalidatePhysicsRecursive"
{
"signature" "CBaseEntity::InvalidatePhysicsRecursive"
"callconv" "thiscall"
"return" "void"
"this" "entity"
"arguments"
{
"nChangeFlags"
{
"type" "int"
}
}
}
} }
} }
} }

View File

@ -12,7 +12,7 @@ public Plugin myinfo =
name = "LagCompensation", name = "LagCompensation",
author = "BotoX", author = "BotoX",
description = "", description = "",
version = "0.0", version = "0.1",
url = "" url = ""
}; };
@ -51,7 +51,6 @@ EntityLagData g_aEntityLagData[MAX_ENTITIES];
int g_iNumEntities = 0; int g_iNumEntities = 0;
bool g_bCleaningUp = false; bool g_bCleaningUp = false;
Handle g_hPhysicsTouchTriggers;
Handle g_hGetAbsOrigin; Handle g_hGetAbsOrigin;
Handle g_hSetAbsOrigin; Handle g_hSetAbsOrigin;
Handle g_hSetLocalAngles; Handle g_hSetLocalAngles;
@ -68,16 +67,6 @@ public void OnPluginStart()
if(!hGameData) if(!hGameData)
SetFailState("Failed to load LagCompensation gamedata."); SetFailState("Failed to load LagCompensation gamedata.");
// CBaseEntity::PhysicsTouchTriggers
StartPrepSDKCall(SDKCall_Entity);
if(!PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "CBaseEntity::PhysicsTouchTriggers"))
{
delete hGameData;
SetFailState("PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, \"CBaseEntity::PhysicsTouchTriggers\") failed!");
}
PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef);
g_hPhysicsTouchTriggers = EndPrepSDKCall();
// CBaseEntity::GetAbsOrigin // CBaseEntity::GetAbsOrigin
StartPrepSDKCall(SDKCall_Entity); StartPrepSDKCall(SDKCall_Entity);
if(!PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "GetAbsOrigin")) if(!PrepSDKCall_SetFromConf(hGameData, SDKConf_Signature, "GetAbsOrigin"))
@ -426,7 +415,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, client, g_aaLagRecords[i][iRecordIndex]); RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, g_aaLagRecords[i][iRecordIndex]);
g_aEntityLagData[i].bRestore = !g_aEntityLagData[i].iDeleted; g_aEntityLagData[i].bRestore = !g_aEntityLagData[i].iDeleted;
#if defined DEBUG #if defined DEBUG
@ -451,7 +440,7 @@ public void OnPostPlayerThinkFunctions()
if(!g_aEntityLagData[i].bRestore) if(!g_aEntityLagData[i].bRestore)
continue; continue;
RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, 0, g_aEntityLagData[i].RestoreData); RestoreEntityFromRecord(g_aEntityLagData[i].iEntity, g_aEntityLagData[i].RestoreData);
g_aEntityLagData[i].bRestore = false; g_aEntityLagData[i].bRestore = false;
#if defined DEBUG #if defined DEBUG
@ -562,17 +551,11 @@ void RecordDataIntoRecord(int iEntity, LagRecord Record)
Record.flSimulationTime = GetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime"); Record.flSimulationTime = GetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime");
} }
void RestoreEntityFromRecord(int iEntity, int iFilter, LagRecord Record) void RestoreEntityFromRecord(int iEntity, LagRecord Record)
{ {
FilterTriggerMoved(iFilter);
//BlockSolidMoved(iEntity);
SDKCall(g_hSetLocalAngles, iEntity, Record.vecAngles); SDKCall(g_hSetLocalAngles, iEntity, Record.vecAngles);
SDKCall(g_hSetAbsOrigin, iEntity, Record.vecOrigin); SDKCall(g_hSetAbsOrigin, iEntity, Record.vecOrigin);
SetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime", Record.flSimulationTime); SetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime", Record.flSimulationTime);
//BlockSolidMoved(-1);
FilterTriggerMoved(-1);
} }
bool AddEntityForLagCompensation(int iEntity) bool AddEntityForLagCompensation(int iEntity)
@ -581,7 +564,18 @@ bool AddEntityForLagCompensation(int iEntity)
return false; return false;
if(g_iNumEntities == MAX_ENTITIES) if(g_iNumEntities == MAX_ENTITIES)
{
char sClassname[64];
GetEntityClassname(iEntity, sClassname, sizeof(sClassname));
char sTargetname[64];
GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
int iHammerID = GetEntProp(iEntity, Prop_Data, "m_iHammerID");
PrintToBoth("[%d] OUT OF LAGCOMP SLOTS entity %d (%s)\"%s\"(#%d)", GetGameTickCount(), iEntity, sClassname, sTargetname, iHammerID);
return false; return false;
}
for(int i = 0; i < g_iNumEntities; i++) for(int i = 0; i < g_iNumEntities; i++)
{ {
@ -601,16 +595,16 @@ bool AddEntityForLagCompensation(int iEntity)
g_aEntityLagData[i].iNotMoving = MAX_RECORDS; g_aEntityLagData[i].iNotMoving = MAX_RECORDS;
g_aEntityLagData[i].bRestore = false; g_aEntityLagData[i].bRestore = false;
RecordDataIntoRecord(g_aEntityLagData[i].iEntity, g_aaLagRecords[i][0]); RecordDataIntoRecord(iEntity, g_aaLagRecords[i][0]);
{ {
char sClassname[64]; char sClassname[64];
GetEntityClassname(g_aEntityLagData[i].iEntity, sClassname, sizeof(sClassname)); GetEntityClassname(iEntity, sClassname, sizeof(sClassname));
char sTargetname[64]; char sTargetname[64];
GetEntPropString(g_aEntityLagData[i].iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
int iHammerID = GetEntProp(g_aEntityLagData[i].iEntity, Prop_Data, "m_iHammerID"); int iHammerID = GetEntProp(iEntity, Prop_Data, "m_iHammerID");
PrintToBoth("[%d] added entity %d (%s)\"%s\"(#%d) under index %d", GetGameTickCount(), iEntity, sClassname, sTargetname, iHammerID, i); PrintToBoth("[%d] added entity %d (%s)\"%s\"(#%d) under index %d", GetGameTickCount(), iEntity, sClassname, sTargetname, iHammerID, i);
} }
@ -664,17 +658,7 @@ public void OnEntitySpawned(int entity, const char[] classname)
if(iParent == INVALID_ENT_REFERENCE) if(iParent == INVALID_ENT_REFERENCE)
return; return;
/*
{
char sTargetname[64];
GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
char sParentTargetname[64];
GetEntPropString(iParent, Prop_Data, "m_iName", sParentTargetname, sizeof(sParentTargetname));
PrintToBoth("CHECKING %s %s | parent: %s %s", classname, sTargetname, sParentClassname, sParentTargetname);
}
*/
if(!bGoodParents) if(!bGoodParents)
return; return;
@ -682,16 +666,6 @@ public void OnEntitySpawned(int entity, const char[] classname)
return; return;
g_aBlockTriggerTouch[entity] = 1; g_aBlockTriggerTouch[entity] = 1;
{
char sTargetname[64];
GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname));
char sParentTargetname[64];
GetEntPropString(iParent, Prop_Data, "m_iName", sParentTargetname, sizeof(sParentTargetname));
PrintToBoth("added %s %s | parent: %s %s", classname, sTargetname, sParentClassname, sParentTargetname);
}
} }
public void OnEntityDestroyed(int entity) public void OnEntityDestroyed(int entity)