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"
{
"CBaseEntity::PhysicsTouchTriggers"
{
"library" "server"
"linux" "@_ZN11CBaseEntity20PhysicsTouchTriggersEPK6Vector"
}
"::UTIL_Remove"
{
"library" "server"
@ -22,12 +16,6 @@
"linux" "@_ZN12CCSGameRules12RestartRoundEv"
}
"CBaseEntity::InvalidatePhysicsRecursive"
{
"library" "server"
"linux" "@_ZN11CBaseEntity26InvalidatePhysicsRecursiveEi"
}
"GetAbsOrigin"
{
"library" "server"
@ -40,21 +28,6 @@
"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"
{
"library" "server"
@ -64,21 +37,6 @@
"Functions"
{
"CBaseEntity__PhysicsTouchTriggers"
{
"signature" "CBaseEntity::PhysicsTouchTriggers"
"callconv" "thiscall"
"return" "void"
"this" "entity"
"arguments"
{
"pPrevAbsOrigin"
{
"type" "vectorptr"
}
}
}
"UTIL_Remove"
{
"signature" "::UTIL_Remove"
@ -100,21 +58,6 @@
"return" "void"
"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",
author = "BotoX",
description = "",
version = "0.0",
version = "0.1",
url = ""
};
@ -51,7 +51,6 @@ EntityLagData g_aEntityLagData[MAX_ENTITIES];
int g_iNumEntities = 0;
bool g_bCleaningUp = false;
Handle g_hPhysicsTouchTriggers;
Handle g_hGetAbsOrigin;
Handle g_hSetAbsOrigin;
Handle g_hSetLocalAngles;
@ -68,16 +67,6 @@ public void OnPluginStart()
if(!hGameData)
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
StartPrepSDKCall(SDKCall_Entity);
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)
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;
#if defined DEBUG
@ -451,7 +440,7 @@ public void OnPostPlayerThinkFunctions()
if(!g_aEntityLagData[i].bRestore)
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;
#if defined DEBUG
@ -562,17 +551,11 @@ void RecordDataIntoRecord(int iEntity, LagRecord Record)
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_hSetAbsOrigin, iEntity, Record.vecOrigin);
SetEntPropFloat(iEntity, Prop_Data, "m_flSimulationTime", Record.flSimulationTime);
//BlockSolidMoved(-1);
FilterTriggerMoved(-1);
}
bool AddEntityForLagCompensation(int iEntity)
@ -581,7 +564,18 @@ bool AddEntityForLagCompensation(int iEntity)
return false;
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;
}
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].bRestore = false;
RecordDataIntoRecord(g_aEntityLagData[i].iEntity, g_aaLagRecords[i][0]);
RecordDataIntoRecord(iEntity, g_aaLagRecords[i][0]);
{
char sClassname[64];
GetEntityClassname(g_aEntityLagData[i].iEntity, sClassname, sizeof(sClassname));
GetEntityClassname(iEntity, sClassname, sizeof(sClassname));
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);
}
@ -664,17 +658,7 @@ public void OnEntitySpawned(int entity, const char[] classname)
if(iParent == INVALID_ENT_REFERENCE)
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)
return;
@ -682,16 +666,6 @@ public void OnEntitySpawned(int entity, const char[] classname)
return;
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)