CLagCompensationManager::BacktrackEntity
0x007ca420 · 6094 bytes · __thiscall
_ZN23CLagCompensationManager15BacktrackEntityEP11CBaseEntityfP19CUtlFixedLinkedListI9LagRecordEPS3_S6_b
Decompiled
undefined (7 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CLagCompensationManager::BacktrackEntity(CBaseEntity*, float, CUtlFixedLinkedList<LagRecord>*,
LagRecord*, LagRecord*, bool) */
undefined4 __thiscall
CLagCompensationManager::BacktrackEntity
(CLagCompensationManager *this,CBaseEntity *param_1,float param_2,
CUtlFixedLinkedList *param_3,LagRecord *param_4,LagRecord *param_5,bool param_6)
{
float *pfVar1;
float *pfVar2;
byte *pbVar3;
CCollisionProperty *this_00;
uint *puVar4;
float fVar5;
float fVar6;
float fVar7;
int iVar8;
CBaseEdict *pCVar9;
char *pcVar10;
short sVar11;
bool bVar12;
byte bVar13;
char cVar14;
ushort uVar15;
float *pfVar16;
int iVar17;
CBaseAnimating *pCVar18;
CBaseAnimatingOverlay *this_01;
int iVar19;
int iVar20;
int iVar21;
undefined4 *puVar22;
LagRecord *pLVar23;
undefined4 uVar24;
byte *pbVar25;
byte *pbVar26;
longdouble lVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
float local_120;
uint local_11c;
float local_118;
float local_114;
float local_110;
byte *local_104;
float local_100;
undefined4 local_f4;
undefined4 local_f0;
undefined4 local_ec [2];
float local_e4;
float local_e0;
float local_dc;
float local_d8;
float local_d4;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
undefined4 local_b4;
undefined4 local_b0;
int local_ac;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
float local_98;
float local_94;
Quaternion local_90 [16];
Quaternion local_80 [16];
float local_70;
float local_6c;
float local_68;
float local_44;
char local_3a;
char local_39;
CBaseEntity *local_24;
local_f4 = 0;
local_f0 = 0;
if (_towlower == 0) {
local_ac = 0;
}
else {
(**(code **)(_towlower + 0x50))
(_towlower,&local_f4,0,0,0,0,"/data/src/game/server/player_lagcompensation.cpp",0x18e,
&BacktrackEntity(CBaseEntity*,float,CUtlFixedLinkedList<LagRecord>*,LagRecord*,LagRecord*,bool)
::tm_fmt,"(%s)%s","CLagCompensationManager","BacktrackEntity");
local_ac = _towlower;
}
iVar17 = _DAT_0105db00;
local_b4 = local_f4;
local_b0 = local_f0;
/* try { // try from 007cacb6 to 007cad16 has its CatchHandler @ 007cbc71 */
if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
(iVar20 = ThreadGetCurrentId(), iVar17 == iVar20)) {
if ((char *)*_DAT_0105d15c != "BacktrackEntity") {
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xcbc6c0,(char *)0x0,0xcbc670);
}
puVar4 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar4 = *puVar4 | 4;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
if (0 < *(int *)(param_3 + 0x18)) {
pbVar25 = *(byte **)(param_3 + 0xc);
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
if (pbVar25 != (byte *)0x0) {
local_104 = (byte *)0x0;
pbVar26 = (byte *)0x0;
fVar29 = *(float *)(param_1 + 0x2e8);
fVar30 = *(float *)(param_1 + 0x2e4);
fVar32 = *(float *)(param_1 + 0x2e0);
while ((pbVar25 != *(byte **)(pbVar25 + 0x130) || (*(byte **)(pbVar25 + 0x134) == pbVar25))) {
if ((*pbVar25 & 1) == 0) goto LAB_007cad60;
pfVar16 = (float *)(pbVar25 + 8);
pfVar1 = (float *)(pbVar25 + 4);
fVar30 = *pfVar16 - fVar30;
fVar32 = *pfVar1 - fVar32;
pfVar2 = (float *)(pbVar25 + 0xc);
fVar29 = *pfVar2 - fVar29;
if (4096.0 < fVar29 * fVar29 + fVar32 * fVar32 + fVar30 * fVar30) goto LAB_007cad60;
local_104 = pbVar26;
pbVar26 = pbVar25;
if ((*(float *)(pbVar25 + 0x34) <= param_2) ||
(pbVar3 = pbVar25 + 0x134, pbVar25 = *(byte **)pbVar3, fVar29 = *pfVar2,
fVar30 = *pfVar16, fVar32 = *pfVar1, *(byte **)pbVar3 == (byte *)0x0)) break;
}
if (pbVar26 != (byte *)0x0) {
if (((local_104 == (byte *)0x0) || (fVar29 = *(float *)(pbVar26 + 0x34), param_2 <= fVar29))
|| (*(float *)(local_104 + 0x34) <= fVar29)) {
local_c0 = *(float *)(pbVar26 + 0x10);
local_120 = 0.0;
local_bc = *(float *)(pbVar26 + 0x14);
local_b8 = *(float *)(pbVar26 + 0x18);
local_e4 = *(float *)(pbVar26 + 4);
local_e0 = *(float *)(pbVar26 + 8);
local_dc = *(float *)(pbVar26 + 0xc);
local_d8 = *(float *)(pbVar26 + 0x1c);
local_d4 = *(float *)(pbVar26 + 0x20);
local_d0 = *(float *)(pbVar26 + 0x24);
local_cc = *(float *)(pbVar26 + 0x28);
local_c8 = *(float *)(pbVar26 + 0x2c);
local_c4 = *(float *)(pbVar26 + 0x30);
}
else {
local_c0 = *(float *)(local_104 + 0x10);
local_120 = (param_2 - fVar29) / (*(float *)(local_104 + 0x34) - fVar29);
if (((local_c0 != *(float *)(pbVar26 + 0x10)) ||
(local_bc = *(float *)(local_104 + 0x14), local_bc != *(float *)(pbVar26 + 0x14))) ||
(local_b8 = *(float *)(pbVar26 + 0x18), local_b8 != *(float *)(local_104 + 0x18))) {
AngleQuaternion((QAngle *)(pbVar26 + 0x10),local_90);
AngleQuaternion((QAngle *)(local_104 + 0x10),local_80);
QuaternionSlerp(local_90,local_80,local_120,(Quaternion *)&local_70);
QuaternionAngles((Quaternion *)&local_70,(QAngle *)&local_a8);
local_c0 = local_a8;
local_b8 = local_a0;
local_bc = local_a4;
}
local_e0 = (*(float *)(local_104 + 8) - *(float *)(pbVar26 + 8)) * local_120 +
*(float *)(pbVar26 + 8);
local_dc = (*(float *)(local_104 + 0xc) - *(float *)(pbVar26 + 0xc)) * local_120 +
*(float *)(pbVar26 + 0xc);
local_e4 = (*(float *)(local_104 + 4) - *(float *)(pbVar26 + 4)) * local_120 +
*(float *)(pbVar26 + 4);
local_d4 = (*(float *)(local_104 + 0x20) - *(float *)(pbVar26 + 0x20)) * local_120 +
*(float *)(pbVar26 + 0x20);
local_d0 = (*(float *)(local_104 + 0x24) - *(float *)(pbVar26 + 0x24)) * local_120 +
*(float *)(pbVar26 + 0x24);
local_d8 = (*(float *)(local_104 + 0x1c) - *(float *)(pbVar26 + 0x1c)) * local_120 +
*(float *)(pbVar26 + 0x1c);
local_c8 = (*(float *)(local_104 + 0x2c) - *(float *)(pbVar26 + 0x2c)) * local_120 +
*(float *)(pbVar26 + 0x2c);
local_c4 = (*(float *)(local_104 + 0x30) - *(float *)(pbVar26 + 0x30)) * local_120 +
*(float *)(pbVar26 + 0x30);
local_cc = (*(float *)(local_104 + 0x28) - *(float *)(pbVar26 + 0x28)) * local_120 +
*(float *)(pbVar26 + 0x28);
}
if (*(int *)(sv_unlag_fixstuck._28_4_ + 0x30) != 0) {
iVar17 = CBaseEntity::GetTeamNumber(param_1);
cVar14 = IsASurvivorTeam(iVar17);
UTIL_TraceEntity(param_1,(Vector *)&local_e4,(Vector *)&local_e4,
(-(uint)(cVar14 == '\0') & 0x10000) + 0x201420b,(CGameTrace *)&local_70);
if ((local_39 != '\0') || (local_3a != '\0')) {
if (*(int *)(sv_unlag_debug._28_4_ + 0x30) != 0) {
if (*(int *)(param_1 + 0x30) == 0) {
iVar17 = 0;
}
else {
iVar17 = *(int *)(param_1 + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
}
DevMsg("WARNING: BackupPlayer trying to back player into a bad position - client %d\n"
,iVar17);
}
if ((local_24 != (CBaseEntity *)0x0) && (*(CBaseEntity **)(this + 0x30) != local_24)) {
puVar22 = (undefined4 *)(**(code **)(*(int *)local_24 + 0xc))(local_24);
local_ec[0] = *puVar22;
uVar15 = CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::Node_t,unsigned_short,CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
::Find((CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::Node_t,unsigned_short,CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,CLagCompensationManager::EntityLagData*,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
*)(this + 0x10),(Node_t *)local_ec);
if ((uVar15 != 0xffff) &&
(pcVar10 = *(char **)((uint)uVar15 * 0x10 + *(int *)(this + 0x14) + 0xc),
*pcVar10 == '\0')) {
*pcVar10 = '\x01';
BacktrackEntity(this,local_24,param_2,(CUtlFixedLinkedList *)(pcVar10 + 4),
(LagRecord *)(pcVar10 + 0x30),(LagRecord *)(pcVar10 + 0x160),true);
*pcVar10 = '\0';
}
}
iVar17 = CBaseEntity::GetTeamNumber(param_1);
cVar14 = IsASurvivorTeam(iVar17);
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
UTIL_TraceEntity(param_1,(Vector *)(param_1 + 0x2e0),(Vector *)&local_e4,
(-(uint)(cVar14 == '\0') & 0x10000) + 0x201420b,(CGameTrace *)&local_70
);
if ((local_39 == '\0') && (local_3a == '\0')) {
fVar29 = g_flFractionScale * local_44;
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
local_e0 = (local_e0 - *(float *)(param_1 + 0x2e4)) * fVar29 +
*(float *)(param_1 + 0x2e4);
local_dc = (local_dc - *(float *)(param_1 + 0x2e8)) * fVar29 +
*(float *)(param_1 + 0x2e8);
local_e4 = (local_e4 - *(float *)(param_1 + 0x2e0)) * fVar29 +
*(float *)(param_1 + 0x2e0);
if (*(int *)(sv_unlag_debug._28_4_ + 0x30) != 0) {
DevMsg("Backtrack got most of the way\n");
}
}
else if (*(int *)(sv_unlag_debug._28_4_ + 0x30) != 0) {
DevMsg("Backtrack failed completely, bad starting position\n");
}
}
}
if (((byte)param_1[0x14d] & 8) == 0) {
local_118 = *(float *)(param_1 + 0x37c) - local_c0;
local_110 = *(float *)(param_1 + 0x380) - local_bc;
local_114 = *(float *)(param_1 + 900) - local_b8;
}
else {
CBaseEntity::CalcAbsolutePosition(param_1);
local_118 = *(float *)(param_1 + 0x37c) - local_c0;
local_110 = *(float *)(param_1 + 0x380) - local_bc;
local_114 = *(float *)(param_1 + 900) - local_b8;
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
}
fVar29 = *(float *)(param_1 + 0x2e0) - local_e4;
fVar30 = *(float *)(param_1 + 0x2e8) - local_dc;
fVar32 = *(float *)(param_1 + 0x2e4) - local_e0;
*(undefined4 *)(param_4 + 0x34) = *(undefined4 *)(param_1 + 0x94);
if (local_114 * local_114 + local_118 * local_118 + local_110 * local_110 <= 0.010000001) {
local_11c = 0;
}
else {
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
*(undefined4 *)(param_4 + 0x10) = *(undefined4 *)(param_1 + 0x37c);
*(undefined4 *)(param_4 + 0x14) = *(undefined4 *)(param_1 + 0x380);
*(undefined4 *)(param_4 + 0x18) = *(undefined4 *)(param_1 + 900);
/* try { // try from 007ca807 to 007cac73 has its CatchHandler @ 007cbc4d */
CBaseEntity::SetAbsAngles(param_1,(QAngle *)&local_c0);
local_11c = 0x200;
*(float *)(param_5 + 0x10) = local_c0;
*(float *)(param_5 + 0x14) = local_bc;
*(float *)(param_5 + 0x18) = local_b8;
}
this_00 = (CCollisionProperty *)(param_1 + 0x194);
pfVar16 = (float *)(**(code **)(*(int *)(param_1 + 0x194) + 4))(this_00);
if (((((*pfVar16 != local_d8) || (pfVar16[1] != local_d4)) || (pfVar16[2] != local_d0)) ||
((pfVar16 = (float *)(**(code **)(*(int *)(param_1 + 0x194) + 8))(this_00),
*pfVar16 != local_cc || (pfVar16[1] != local_c8)))) || (pfVar16[2] != local_c4)) {
/* try { // try from 007cae0c to 007cbc3a has its CatchHandler @ 007cbc4d */
puVar22 = (undefined4 *)(**(code **)(*(int *)(param_1 + 0x194) + 4))(this_00);
*(undefined4 *)(param_4 + 0x1c) = *puVar22;
*(undefined4 *)(param_4 + 0x20) = puVar22[1];
*(undefined4 *)(param_4 + 0x24) = puVar22[2];
puVar22 = (undefined4 *)(**(code **)(*(int *)(param_1 + 0x194) + 8))(this_00);
*(undefined4 *)(param_4 + 0x28) = *puVar22;
*(undefined4 *)(param_4 + 0x2c) = puVar22[1];
*(undefined4 *)(param_4 + 0x30) = puVar22[2];
CCollisionProperty::SetCollisionBounds(this_00,(Vector *)&local_d8,(Vector *)&local_cc);
local_11c = local_11c | 0x400;
*(float *)(param_5 + 0x1c) = local_d8;
*(float *)(param_5 + 0x20) = local_d4;
*(float *)(param_5 + 0x24) = local_d0;
*(float *)(param_5 + 0x28) = local_cc;
*(float *)(param_5 + 0x2c) = local_c8;
*(float *)(param_5 + 0x30) = local_c4;
}
if (0.010000001 < fVar32 * fVar32 + fVar29 * fVar29 + fVar30 * fVar30) {
local_11c = local_11c | 0x100;
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
*(undefined4 *)(param_4 + 4) = *(undefined4 *)(param_1 + 0x2e0);
*(undefined4 *)(param_4 + 8) = *(undefined4 *)(param_1 + 0x2e4);
*(undefined4 *)(param_4 + 0xc) = *(undefined4 *)(param_1 + 0x2e8);
CBaseEntity::SetAbsOrigin(param_1,(Vector *)&local_e4);
*(float *)(param_5 + 4) = local_e4;
*(float *)(param_5 + 8) = local_e0;
*(float *)(param_5 + 0xc) = local_dc;
}
if (*(int *)(this + 0x34) == 0) {
LAB_007caef0:
if (local_11c == 0) goto LAB_007cad60;
}
else {
if (*(int *)(this + 0x34) == 2) {
AngleVectors((QAngle *)(this + 0x44),(Vector *)&local_70);
fVar29 = *(float *)(this + 0x50);
fVar33 = local_70 * fVar29 + *(float *)(this + 0x38);
fVar31 = local_6c * fVar29 + *(float *)(this + 0x3c);
fVar28 = fVar29 * local_68 + *(float *)(this + 0x40);
pfVar16 = (float *)(**(code **)(*(int *)param_1 + 0x288))(param_1);
fVar29 = pfVar16[2];
fVar30 = *pfVar16;
fVar32 = pfVar16[1];
fVar5 = *(float *)(this + 0x40);
fVar6 = *(float *)(this + 0x38);
fVar7 = *(float *)(this + 0x3c);
local_9c = fVar33 - fVar6;
local_98 = fVar31 - fVar7;
local_94 = fVar28 - fVar5;
lVar27 = (longdouble)VectorNormalize((Vector *)&local_9c);
fVar29 = (fVar32 - fVar7) * local_98 + (fVar30 - fVar6) * local_9c +
(fVar29 - fVar5) * local_94;
if (fVar29 < 0.0) {
fVar31 = *pfVar16 - *(float *)(this + 0x38);
fVar33 = pfVar16[1] - *(float *)(this + 0x3c);
fVar28 = pfVar16[2] - *(float *)(this + 0x40);
LAB_007cb2d9:
fVar29 = -SQRT(fVar28 * fVar28 + fVar31 * fVar31 + fVar33 * fVar33);
}
else {
if ((float)lVar27 < fVar29) {
fVar33 = *pfVar16 - fVar33;
fVar31 = pfVar16[1] - fVar31;
fVar28 = pfVar16[2] - fVar28;
goto LAB_007cb2d9;
}
fVar32 = (*pfVar16 - *(float *)(this + 0x38)) - local_9c * fVar29;
fVar30 = (pfVar16[1] - *(float *)(this + 0x3c)) - local_98 * fVar29;
fVar29 = (pfVar16[2] - *(float *)(this + 0x40)) - fVar29 * local_94;
fVar29 = SQRT(fVar30 * fVar30 + fVar29 * fVar29 + fVar32 * fVar32);
}
bVar12 = fVar29 <= 100.0 && 0.0 <= fVar29;
}
else {
bVar12 = true;
}
bVar13 = bVar12 & param_6;
if ((bVar13 == 0) ||
(iVar17 = (**(code **)(*(int *)param_1 + 0xf0))(param_1), iVar17 == 0))
goto LAB_007caef0;
pCVar18 = (CBaseAnimating *)(**(code **)(*(int *)param_1 + 0xf0))(param_1);
local_11c = local_11c | 0x800;
*(undefined4 *)(param_4 + 0x128) = *(undefined4 *)(pCVar18 + 0x494);
*(undefined4 *)(param_4 + 300) = *(undefined4 *)(pCVar18 + 0x490);
iVar17 = *(int *)(pbVar26 + 0x128);
sVar11 = (short)pCVar18;
if (((local_104 == (byte *)0x0) || (iVar17 != *(int *)(local_104 + 0x128))) ||
(local_120 <= 0.0)) {
CBaseAnimating::SetSequence(pCVar18,iVar17);
fVar29 = *(float *)(pbVar26 + 300);
if (fVar29 == *(float *)(pCVar18 + 0x490)) {
bVar13 = 0;
}
else {
CServerNetworkProperty::NetworkStateChanged(sVar11 + 0x24);
bVar13 = 0;
*(float *)(pCVar18 + 0x490) = fVar29;
}
}
else {
CBaseAnimating::SetSequence(pCVar18,(int)(float)iVar17);
fVar29 = *(float *)(local_104 + 300);
local_100 = *(float *)(pbVar26 + 300);
fVar32 = (fVar29 - local_100) * local_120 + local_100;
fVar30 = *(float *)(pCVar18 + 0x490);
if (fVar32 != *(float *)(pCVar18 + 0x490)) {
CServerNetworkProperty::NetworkStateChanged(sVar11 + 0x24);
*(float *)(pCVar18 + 0x490) = fVar32;
local_100 = *(float *)(pbVar26 + 300);
fVar29 = *(float *)(local_104 + 300);
fVar30 = fVar32;
}
if (local_100 <= fVar29) {
local_100 = local_100 + (fVar29 - local_100) * local_120;
if (local_100 != fVar30) {
CServerNetworkProperty::NetworkStateChanged(sVar11 + 0x24);
*(float *)(pCVar18 + 0x490) = local_100;
}
}
else {
local_100 = ((fVar29 + 1.0) - local_100) * local_120 + local_100;
if (1.0 <= local_100) {
local_100 = local_100 - 1.0;
}
if (local_100 != fVar30) {
CServerNetworkProperty::NetworkStateChanged(sVar11 + 0x24);
*(float *)(pCVar18 + 0x490) = local_100;
}
}
}
this_01 = (CBaseAnimatingOverlay *)(**(code **)(*(int *)param_1 + 0xf4))(param_1);
if ((this_01 != (CBaseAnimatingOverlay *)0x0) &&
(iVar17 = *(int *)(this_01 + 0x1400), 0 < iVar17)) {
pbVar26 = pbVar26 + 0x38;
local_100 = 0.0;
pLVar23 = param_4;
do {
iVar20 = CBaseAnimatingOverlay::GetAnimOverlay(this_01,(int)local_100);
if (iVar20 != 0) {
*(undefined4 *)(pLVar23 + 0x3c) = *(undefined4 *)(iVar20 + 0xc);
*(undefined4 *)(pLVar23 + 0x44) = *(undefined4 *)(iVar20 + 0x3c);
*(undefined4 *)(pLVar23 + 0x38) = *(undefined4 *)(iVar20 + 8);
*(undefined4 *)(pLVar23 + 0x40) = *(undefined4 *)(iVar20 + 0x14);
if (((bVar13 == 0) ||
(fVar29 = *(float *)(pbVar26 + 0xc), fVar29 != (float)*(int *)(local_104 + 0x44)
)) || (*(int *)pbVar26 != *(int *)(local_104 + 0x38))) {
fVar29 = *(float *)(pbVar26 + 4);
if (fVar29 != *(float *)(iVar20 + 0xc)) {
iVar8 = *(int *)(iVar20 + 0x48);
if (iVar8 != 0) {
if (*(char *)(iVar8 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar8 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar21 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar21 + 2) = 0;
}
}
else {
*(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
}
*(undefined4 *)(iVar8 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar8 + 0x78) = 0;
}
*(float *)(iVar20 + 0xc) = fVar29;
}
iVar8 = *(int *)(pbVar26 + 0xc);
if (iVar8 != *(int *)(iVar20 + 0x3c)) {
iVar21 = *(int *)(iVar20 + 0x48);
if (iVar21 != 0) {
if (*(char *)(iVar21 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar21 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar19 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar19 + 2) = 0;
}
}
else {
*(byte *)(iVar21 + 0x70) = *(byte *)(iVar21 + 0x70) | 1;
}
*(undefined4 *)(iVar21 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar21 + 0x78) = 0;
}
*(int *)(iVar20 + 0x3c) = iVar8;
}
iVar8 = *(int *)pbVar26;
if (iVar8 != *(int *)(iVar20 + 8)) {
iVar21 = *(int *)(iVar20 + 0x48);
if (iVar21 != 0) {
if (*(char *)(iVar21 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar21 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar19 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar19 + 2) = 0;
}
}
else {
*(byte *)(iVar21 + 0x70) = *(byte *)(iVar21 + 0x70) | 1;
}
*(undefined4 *)(iVar21 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar21 + 0x78) = 0;
}
*(int *)(iVar20 + 8) = iVar8;
}
fVar29 = *(float *)(pbVar26 + 8);
if (fVar29 != *(float *)(iVar20 + 0x14)) {
iVar8 = *(int *)(iVar20 + 0x48);
if (iVar8 != 0) {
if (*(char *)(iVar8 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar8 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar21 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar21 + 2) = 0;
}
}
else {
*(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
}
*(undefined4 *)(iVar8 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar8 + 0x78) = 0;
}
*(float *)(iVar20 + 0x14) = fVar29;
}
}
else {
local_110 = *(float *)(pbVar26 + 4);
fVar30 = *(float *)(local_104 + 0x3c);
if (local_110 <= fVar30) {
local_110 = local_110 + (fVar30 - local_110) * local_120;
if (local_110 != *(float *)(iVar20 + 0xc)) {
iVar8 = *(int *)(iVar20 + 0x48);
if (iVar8 != 0) {
if (*(char *)(iVar8 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar8 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar21 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar21 + 2) = 0;
}
}
else {
*(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
}
*(undefined4 *)(iVar8 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar8 + 0x78) = 0;
}
*(float *)(iVar20 + 0xc) = local_110;
fVar29 = (float)*(int *)(pbVar26 + 0xc);
}
}
else {
local_110 = ((fVar30 + 1.0) - local_110) * local_120 + local_110;
if (1.0 <= local_110) {
local_110 = local_110 - 1.0;
}
if (local_110 != *(float *)(iVar20 + 0xc)) {
iVar8 = *(int *)(iVar20 + 0x48);
if (iVar8 != 0) {
if (*(char *)(iVar8 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar8 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar21 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar21 + 2) = 0;
}
}
else {
*(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
}
*(undefined4 *)(iVar8 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar8 + 0x78) = 0;
}
*(float *)(iVar20 + 0xc) = local_110;
fVar29 = (float)*(int *)(pbVar26 + 0xc);
}
}
local_110 = fVar29;
if ((float)*(int *)(iVar20 + 0x3c) != local_110) {
if (*(CBaseEntity **)(iVar20 + 0x48) != (CBaseEntity *)0x0) {
CBaseEntity::NetworkStateChanged(*(CBaseEntity **)(iVar20 + 0x48));
}
*(float *)(iVar20 + 0x3c) = local_110;
}
iVar8 = *(int *)pbVar26;
if (iVar8 != *(int *)(iVar20 + 8)) {
iVar21 = *(int *)(iVar20 + 0x48);
if (iVar21 != 0) {
if (*(char *)(iVar21 + 0x6c) == '\0') {
pCVar9 = *(CBaseEdict **)(iVar21 + 0x30);
if (pCVar9 != (CBaseEdict *)0x0) {
*(uint *)pCVar9 = *(uint *)pCVar9 | 0x101;
iVar19 = CBaseEdict::GetChangeAccessor(pCVar9);
*(undefined2 *)(iVar19 + 2) = 0;
}
}
else {
*(byte *)(iVar21 + 0x70) = *(byte *)(iVar21 + 0x70) | 1;
}
*(undefined4 *)(iVar21 + 0x74) = *(undefined4 *)(gpGlobals + 0xc);
*(undefined4 *)(iVar21 + 0x78) = 0;
}
*(int *)(iVar20 + 8) = iVar8;
}
fVar29 = *(float *)(pbVar26 + 8) +
(*(float *)(local_104 + 0x40) - *(float *)(pbVar26 + 8)) * local_120;
if (fVar29 != *(float *)(iVar20 + 0x14)) {
if (*(CBaseEntity **)(iVar20 + 0x48) != (CBaseEntity *)0x0) {
CBaseEntity::NetworkStateChanged(*(CBaseEntity **)(iVar20 + 0x48));
}
*(float *)(iVar20 + 0x14) = fVar29;
}
}
}
local_100 = (float)((int)local_100 + 1);
pbVar26 = pbVar26 + 0x10;
pLVar23 = pLVar23 + 0x10;
local_104 = local_104 + 0x10;
} while (local_100 != (float)iVar17);
}
}
if (((*(int *)(sv_lagflushbonecache._28_4_ + 0x30) != 0) && ((local_11c & 0x800) != 0)) &&
(iVar17 = (**(code **)(*(int *)param_1 + 0xf0))(param_1), iVar17 != 0)) {
pCVar18 = (CBaseAnimating *)(**(code **)(*(int *)param_1 + 0xf0))(param_1);
CBaseAnimating::InvalidateBoneCache(pCVar18);
}
this[0x2c] = (CLagCompensationManager)0x1;
*(uint *)param_4 = local_11c;
*(uint *)param_5 = local_11c;
if ((*(int *)(sv_showlagcompensation._28_4_ + 0x30) == 1) &&
(iVar17 = (**(code **)(*(int *)param_1 + 0xf0))(param_1), iVar17 != 0)) {
pCVar18 = (CBaseAnimating *)(**(code **)(*(int *)param_1 + 0xf0))(param_1);
CBaseAnimating::DrawServerHitboxes(pCVar18,4.0,true);
}
uVar24 = 1;
goto LAB_007cad62;
}
}
if (*(int *)(sv_unlag_debug._28_4_ + 0x30) != 0) {
if (*(int *)(param_1 + 0x30) == 0) {
iVar17 = 0;
}
else {
iVar17 = *(int *)(param_1 + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
}
/* try { // try from 007cad54 to 007cad58 has its CatchHandler @ 007cbc4d */
DevMsg("No valid positions in history for BacktrackPlayer client ( %d )\n",iVar17);
}
}
LAB_007cad60:
uVar24 = 0;
LAB_007cad62:
iVar17 = _DAT_0105db00;
if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
(iVar20 = ThreadGetCurrentId(), iVar17 == iVar20)) {
cVar14 = CVProfNode::ExitScope();
if (cVar14 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
if (local_ac != 0) {
(**(code **)(local_ac + 0x54))(local_ac,local_b4,local_b0,0,0,0);
}
return uVar24;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.