CLagCompensationManager::RecordDataIntoTrack
0x007cbc80 · 1065 bytes · __thiscall
_ZN23CLagCompensationManager19RecordDataIntoTrackEP11CBaseEntityP19CUtlFixedLinkedListI9LagRecordEb
Decompiled
undefined (4 params)
/* CLagCompensationManager::RecordDataIntoTrack(CBaseEntity*, CUtlFixedLinkedList<LagRecord>*, bool)
*/
void __thiscall
CLagCompensationManager::RecordDataIntoTrack
(CLagCompensationManager *this,CBaseEntity *param_1,CUtlFixedLinkedList *param_2,
bool param_3)
{
int iVar1;
char cVar2;
uint *puVar3;
int iVar4;
CBaseAnimatingOverlay *this_00;
int iVar5;
uint *puVar6;
uint *puVar7;
uint *puVar8;
int *piVar9;
int iVar10;
float fVar11;
iVar4 = *(int *)(param_2 + 0x10);
if (iVar4 != 0) {
fVar11 = (float)(int)(*(float *)(gpGlobals + 0xc) - *(float *)(sv_maxunlag._28_4_ + 0x2c));
do {
if (((iVar4 == *(int *)(iVar4 + 0x130)) && (*(int *)(iVar4 + 0x134) != iVar4)) ||
(fVar11 < *(float *)(iVar4 + 0x34) || fVar11 == *(float *)(iVar4 + 0x34))) break;
CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>::
Unlink((CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>
*)param_2,iVar4);
*(undefined4 *)(iVar4 + 0x134) = *(undefined4 *)(param_2 + 0x14);
*(int *)(param_2 + 0x14) = iVar4;
iVar4 = *(int *)(param_2 + 0x10);
} while (iVar4 != 0);
}
if ((0 < *(int *)(param_2 + 0x18)) &&
(*(float *)(param_1 + 0x94) <= *(float *)(*(int *)(param_2 + 0xc) + 0x34))) {
return;
}
puVar3 = (uint *)CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>
::AllocInternal((CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>
*)param_2,false);
puVar8 = (uint *)0x0;
if (puVar3 == (uint *)0x0) goto LAB_007cbd36;
piVar9 = *(int **)(param_2 + 0x20);
if (((piVar9 == (int *)0x0) || (iVar4 = *(int *)(param_2 + 0x24), iVar4 < 0)) ||
(piVar9[1] <= iVar4)) {
LAB_007cbf65:
if (puVar3 != (uint *)puVar3[0x4c]) {
CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>::
Unlink((CUtlLinkedList<LagRecord,int,true,int,CUtlFixedMemory<UtlLinkedListElem_t<LagRecord,int>>>
*)param_2,(int)puVar3);
}
}
else {
puVar8 = (uint *)(piVar9 + 2);
if ((puVar3 < puVar8) || (puVar8 + piVar9[1] * 0x4e <= puVar3)) {
do {
piVar9 = (int *)*piVar9;
if (piVar9 == (int *)0x0) goto LAB_007cbf65;
} while ((puVar3 < piVar9 + 2) || (piVar9 + 2 + piVar9[1] * 0x4e <= puVar3));
}
else if ((int)puVar3 <= (int)(puVar8 + iVar4 * 0x4e)) goto LAB_007cbf65;
}
puVar3[0x4c] = 0;
puVar3[0x4d] = *(uint *)(param_2 + 0xc);
*(uint **)(param_2 + 0xc) = puVar3;
if (puVar3[0x4d] == 0) {
*(uint **)(param_2 + 0x10) = puVar3;
}
else {
*(uint **)(puVar3[0x4d] + 0x130) = puVar3;
}
*(int *)(param_2 + 0x18) = *(int *)(param_2 + 0x18) + 1;
puVar8 = puVar3 + 0xe;
puVar6 = puVar8;
do {
*puVar6 = 0;
puVar7 = puVar6 + 4;
puVar6[1] = 0;
puVar6[2] = 0;
puVar6[3] = 0;
puVar6 = puVar7;
} while (puVar7 != puVar3 + 0x4a);
*puVar3 = 0;
puVar3[1] = 0;
puVar3[2] = 0;
puVar3[3] = 0;
puVar3[4] = 0;
puVar3[5] = 0;
puVar3[6] = 0;
puVar3[7] = 0;
puVar3[8] = 0;
puVar3[9] = 0;
puVar3[10] = 0;
puVar3[0xb] = 0;
puVar3[0xc] = 0;
puVar3[0xd] = 0xbf800000;
puVar3[0x4a] = 0;
puVar3[0x4b] = 0;
iVar4 = 0;
while( true ) {
*puVar8 = 0;
puVar8[1] = 0;
puVar8[2] = 0;
puVar8[3] = 0;
puVar8 = puVar3;
if (iVar4 + 0x10 == 0xf0) break;
puVar8 = (uint *)((int)puVar3 + iVar4 + 0x48);
iVar4 = iVar4 + 0x10;
}
LAB_007cbd36:
*puVar8 = 0;
cVar2 = (**(code **)(*(int *)param_1 + 300))(param_1);
if (cVar2 != '\0') {
*puVar8 = *puVar8 | 1;
}
puVar8[0xd] = *(uint *)(param_1 + 0x94);
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
puVar8[4] = *(uint *)(param_1 + 0x37c);
puVar8[5] = *(uint *)(param_1 + 0x380);
puVar8[6] = *(uint *)(param_1 + 900);
if (((byte)param_1[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(param_1);
}
puVar8[1] = *(uint *)(param_1 + 0x2e0);
puVar8[2] = *(uint *)(param_1 + 0x2e4);
puVar8[3] = *(uint *)(param_1 + 0x2e8);
puVar3 = (uint *)(**(code **)(*(int *)(param_1 + 0x194) + 4))(param_1 + 0x194);
puVar8[7] = *puVar3;
puVar8[8] = puVar3[1];
puVar8[9] = puVar3[2];
puVar3 = (uint *)(**(code **)(*(int *)(param_1 + 0x194) + 8))(param_1 + 0x194);
puVar8[10] = *puVar3;
puVar8[0xb] = puVar3[1];
puVar8[0xc] = puVar3[2];
iVar4 = (**(code **)(*(int *)param_1 + 0xf0))(param_1);
if ((iVar4 != 0) && (param_3)) {
this_00 = (CBaseAnimatingOverlay *)(**(code **)(*(int *)param_1 + 0xf4))(param_1);
if ((this_00 != (CBaseAnimatingOverlay *)0x0) && (iVar1 = *(int *)(this_00 + 0x1400), 0 < iVar1)
) {
iVar10 = 0;
puVar3 = puVar8;
do {
iVar5 = CBaseAnimatingOverlay::GetAnimOverlay(this_00,iVar10);
if (iVar5 != 0) {
puVar3[0xf] = *(uint *)(iVar5 + 0xc);
puVar3[0x11] = *(uint *)(iVar5 + 0x3c);
puVar3[0xe] = *(uint *)(iVar5 + 8);
puVar3[0x10] = *(uint *)(iVar5 + 0x14);
}
iVar10 = iVar10 + 1;
puVar3 = puVar3 + 4;
} while (iVar10 != iVar1);
}
puVar8[0x4a] = *(uint *)(iVar4 + 0x494);
puVar8[0x4b] = *(uint *)(iVar4 + 0x490);
return;
}
return;
}
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.