CHLTVClientState::ReadDeletions
0x0016b390 · 1768 bytes · __thiscall
_ZN16CHLTVClientState13ReadDeletionsER15CEntityReadInfo
Decompiled
undefined (2 params)
/* CHLTVClientState::ReadDeletions(CEntityReadInfo&) */
void __thiscall CHLTVClientState::ReadDeletions(CHLTVClientState *this,CEntityReadInfo *param_1)
{
undefined4 *puVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uint *puVar7;
int iVar8;
int iVar9;
int local_24;
uint local_1c;
uint local_18;
uint local_14;
iVar9 = *(int *)(param_1 + 0x2c);
iVar2 = *(int *)(iVar9 + 0x14);
if (iVar2 < 6) {
puVar7 = *(uint **)(iVar9 + 0x18);
local_18 = *(uint *)(iVar9 + 0x10);
if (puVar7 == *(uint **)(iVar9 + 0x1c)) {
*(undefined4 *)(iVar9 + 0x14) = 1;
*(undefined4 *)(iVar9 + 0x10) = 0;
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
*(undefined1 *)(iVar9 + 4) = 1;
return;
}
if (*(uint **)(iVar9 + 0x1c) < puVar7) {
*(undefined1 *)(iVar9 + 4) = 1;
*(undefined4 *)(iVar9 + 0x10) = 0;
return;
}
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
uVar4 = *puVar7;
*(uint *)(iVar9 + 0x10) = uVar4;
if (*(char *)(iVar9 + 4) != '\0') {
return;
}
uVar6 = (&CBitBuffer::s_nMaskTable)[6 - iVar2];
*(int *)(iVar9 + 0x14) = iVar2 + 0x1a;
*(uint *)(iVar9 + 0x10) = uVar4 >> ((byte)(6 - iVar2) & 0x1f);
local_18 = (uVar6 & uVar4) << ((byte)iVar2 & 0x1f) | local_18;
LAB_0016b3cd:
uVar4 = local_18 & 0x30;
if (uVar4 != 0x20) goto LAB_0016b3dc;
LAB_0016b558:
iVar2 = *(int *)(iVar9 + 0x14);
uVar4 = *(uint *)(iVar9 + 0x10);
local_18 = local_18 & 0xf;
if (iVar2 < 8) {
puVar7 = *(uint **)(iVar9 + 0x18);
if (puVar7 == *(uint **)(iVar9 + 0x1c)) goto LAB_0016ba4d;
if (puVar7 < *(uint **)(iVar9 + 0x1c)) {
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
uVar5 = *puVar7;
*(uint *)(iVar9 + 0x10) = uVar5;
if (*(char *)(iVar9 + 4) != '\0') goto LAB_0016ba65;
iVar8 = 8 - iVar2;
iVar3 = iVar2 + 0x18;
uVar4 = ((&CBitBuffer::s_nMaskTable)[iVar8] & uVar5) << ((byte)iVar2 & 0x1f) | uVar4;
goto LAB_0016b5af;
}
LAB_0016ba98:
*(undefined1 *)(iVar9 + 4) = 1;
uVar6 = 0;
*(undefined4 *)(iVar9 + 0x10) = 0;
}
else {
*(int *)(iVar9 + 0x14) = iVar2 + -8;
uVar6 = uVar4 & 0xff;
if (iVar2 + -8 == 0) goto LAB_0016ba70;
uVar6 = uVar6 << 4;
*(uint *)(iVar9 + 0x10) = uVar4 >> 8;
}
}
else {
uVar4 = *(uint *)(iVar9 + 0x10);
*(int *)(iVar9 + 0x14) = iVar2 + -6;
local_18 = uVar4 & 0x3f;
if (iVar2 + -6 != 0) {
*(uint *)(iVar9 + 0x10) = uVar4 >> 6;
goto LAB_0016b3cd;
}
puVar1 = *(undefined4 **)(iVar9 + 0x18);
*(undefined4 *)(iVar9 + 0x14) = 0x20;
if (puVar1 == *(undefined4 **)(iVar9 + 0x1c)) {
*(undefined4 *)(iVar9 + 0x14) = 1;
*(undefined4 *)(iVar9 + 0x10) = 0;
*(undefined4 **)(iVar9 + 0x18) = puVar1 + 1;
goto LAB_0016b3cd;
}
if (puVar1 <= *(undefined4 **)(iVar9 + 0x1c)) {
*(undefined4 **)(iVar9 + 0x18) = puVar1 + 1;
*(undefined4 *)(iVar9 + 0x10) = *puVar1;
goto LAB_0016b3cd;
}
*(undefined1 *)(iVar9 + 4) = 1;
*(undefined4 *)(iVar9 + 0x10) = 0;
uVar4 = uVar4 & 0x30;
if (uVar4 == 0x20) goto LAB_0016b558;
LAB_0016b3dc:
if (uVar4 == 0x30) {
iVar2 = *(int *)(iVar9 + 0x14);
uVar4 = *(uint *)(iVar9 + 0x10);
local_18 = local_18 & 0xf;
if (iVar2 < 0x1c) {
puVar7 = *(uint **)(iVar9 + 0x18);
if (puVar7 == *(uint **)(iVar9 + 0x1c)) {
LAB_0016ba4d:
*(undefined4 *)(iVar9 + 0x14) = 1;
*(undefined4 *)(iVar9 + 0x10) = 0;
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
*(undefined1 *)(iVar9 + 4) = 1;
}
else {
if (*(uint **)(iVar9 + 0x1c) <= puVar7) goto LAB_0016ba98;
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
uVar5 = *puVar7;
*(uint *)(iVar9 + 0x10) = uVar5;
if (*(char *)(iVar9 + 4) == '\0') {
iVar8 = 0x1c - iVar2;
iVar3 = iVar2 + 4;
uVar4 = ((&CBitBuffer::s_nMaskTable)[iVar8] & uVar5) << ((byte)iVar2 & 0x1f) | uVar4;
goto LAB_0016b5af;
}
}
LAB_0016ba65:
uVar6 = 0;
}
else {
*(int *)(iVar9 + 0x14) = iVar2 + -0x1c;
uVar6 = uVar4 & 0xfffffff;
if (iVar2 + -0x1c == 0) {
LAB_0016ba70:
puVar1 = *(undefined4 **)(iVar9 + 0x18);
*(undefined4 *)(iVar9 + 0x14) = 0x20;
if (puVar1 == *(undefined4 **)(iVar9 + 0x1c)) {
*(undefined4 *)(iVar9 + 0x14) = 1;
uVar6 = uVar6 << 4;
*(undefined4 *)(iVar9 + 0x10) = 0;
*(undefined4 **)(iVar9 + 0x18) = puVar1 + 1;
}
else if (*(undefined4 **)(iVar9 + 0x1c) < puVar1) {
*(undefined1 *)(iVar9 + 4) = 1;
uVar6 = uVar6 << 4;
*(undefined4 *)(iVar9 + 0x10) = 0;
}
else {
uVar6 = uVar6 << 4;
*(undefined4 **)(iVar9 + 0x18) = puVar1 + 1;
*(undefined4 *)(iVar9 + 0x10) = *puVar1;
}
}
else {
uVar6 = uVar6 << 4;
*(uint *)(iVar9 + 0x10) = uVar4 >> 0x1c;
}
}
}
else {
if (uVar4 != 0x10) goto LAB_0016b3f0;
iVar2 = *(int *)(iVar9 + 0x14);
uVar4 = *(uint *)(iVar9 + 0x10);
local_18 = local_18 & 0xf;
if (iVar2 < 4) {
puVar7 = *(uint **)(iVar9 + 0x18);
if (puVar7 == *(uint **)(iVar9 + 0x1c)) goto LAB_0016ba4d;
if (*(uint **)(iVar9 + 0x1c) <= puVar7) goto LAB_0016ba98;
*(uint **)(iVar9 + 0x18) = puVar7 + 1;
uVar5 = *puVar7;
*(uint *)(iVar9 + 0x10) = uVar5;
if (*(char *)(iVar9 + 4) != '\0') goto LAB_0016ba65;
iVar8 = 4 - iVar2;
iVar3 = iVar2 + 0x1c;
uVar4 = ((&CBitBuffer::s_nMaskTable)[iVar8] & uVar5) << ((byte)iVar2 & 0x1f) | uVar4;
LAB_0016b5af:
*(int *)(iVar9 + 0x14) = iVar3;
uVar6 = uVar4 << 4;
*(uint *)(iVar9 + 0x10) = uVar5 >> ((byte)iVar8 & 0x1f);
}
else {
*(int *)(iVar9 + 0x14) = iVar2 + -4;
uVar6 = uVar4 & 0xf;
if (iVar2 + -4 == 0) goto LAB_0016ba70;
uVar6 = uVar6 << 4;
*(uint *)(iVar9 + 0x10) = uVar4 >> 4;
}
}
}
local_18 = uVar6 | local_18;
LAB_0016b3f0:
if (0 < (int)local_18) {
local_14 = 0;
iVar9 = -1;
do {
iVar2 = *(int *)(param_1 + 0x2c);
iVar3 = *(int *)(iVar2 + 0x14);
uVar4 = *(uint *)(iVar2 + 0x10);
if (iVar3 < 6) {
puVar7 = *(uint **)(iVar2 + 0x18);
if (puVar7 == *(uint **)(iVar2 + 0x1c)) {
*(undefined4 *)(iVar2 + 0x14) = 1;
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
local_1c = 0;
*(undefined4 *)(iVar2 + 0x10) = 0;
*(undefined1 *)(iVar2 + 4) = 1;
}
else {
if (*(uint **)(iVar2 + 0x1c) < puVar7) {
*(undefined1 *)(iVar2 + 4) = 1;
*(undefined4 *)(iVar2 + 0x10) = 0;
}
else {
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
uVar6 = *puVar7;
*(uint *)(iVar2 + 0x10) = uVar6;
if (*(char *)(iVar2 + 4) == '\0') {
uVar5 = (&CBitBuffer::s_nMaskTable)[6 - iVar3];
*(int *)(iVar2 + 0x14) = iVar3 + 0x1a;
local_1c = (uVar5 & uVar6) << ((byte)iVar3 & 0x1f) | uVar4;
*(uint *)(iVar2 + 0x10) = uVar6 >> ((byte)(6 - iVar3) & 0x1f);
goto LAB_0016b42c;
}
}
local_1c = 0;
}
}
else {
*(int *)(iVar2 + 0x14) = iVar3 + -6;
local_1c = uVar4 & 0x3f;
if (iVar3 + -6 == 0) {
puVar1 = *(undefined4 **)(iVar2 + 0x18);
*(undefined4 *)(iVar2 + 0x14) = 0x20;
if (puVar1 == *(undefined4 **)(iVar2 + 0x1c)) {
*(undefined4 *)(iVar2 + 0x14) = 1;
*(undefined4 *)(iVar2 + 0x10) = 0;
*(undefined4 **)(iVar2 + 0x18) = puVar1 + 1;
}
else if (*(undefined4 **)(iVar2 + 0x1c) < puVar1) {
*(undefined1 *)(iVar2 + 4) = 1;
*(undefined4 *)(iVar2 + 0x10) = 0;
}
else {
*(undefined4 **)(iVar2 + 0x18) = puVar1 + 1;
*(undefined4 *)(iVar2 + 0x10) = *puVar1;
}
}
else {
*(uint *)(iVar2 + 0x10) = uVar4 >> 6;
}
LAB_0016b42c:
uVar4 = local_1c & 0x30;
if (uVar4 == 0x20) {
iVar3 = *(int *)(iVar2 + 0x14);
uVar4 = *(uint *)(iVar2 + 0x10);
if (iVar3 < 8) {
puVar7 = *(uint **)(iVar2 + 0x18);
if (puVar7 == *(uint **)(iVar2 + 0x1c)) {
LAB_0016b7a0:
*(undefined4 *)(iVar2 + 0x14) = 1;
*(undefined4 *)(iVar2 + 0x10) = 0;
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
*(undefined1 *)(iVar2 + 4) = 1;
goto LAB_0016b7b8;
}
if (puVar7 < *(uint **)(iVar2 + 0x1c)) {
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
uVar6 = *puVar7;
*(uint *)(iVar2 + 0x10) = uVar6;
if (*(char *)(iVar2 + 4) != '\0') goto LAB_0016b7b8;
local_24 = 8 - iVar3;
uVar4 = ((&CBitBuffer::s_nMaskTable)[local_24] & uVar6) << ((byte)iVar3 & 0x1f) |
uVar4;
iVar3 = iVar3 + 0x18;
LAB_0016b817:
*(int *)(iVar2 + 0x14) = iVar3;
uVar5 = uVar4 << 4;
*(uint *)(iVar2 + 0x10) = uVar6 >> ((byte)local_24 & 0x1f);
}
else {
LAB_0016b7c0:
*(undefined1 *)(iVar2 + 4) = 1;
uVar5 = 0;
*(undefined4 *)(iVar2 + 0x10) = 0;
}
}
else {
*(int *)(iVar2 + 0x14) = iVar3 + -8;
uVar5 = uVar4 & 0xff;
if (iVar3 + -8 == 0) {
LAB_0016b720:
puVar1 = *(undefined4 **)(iVar2 + 0x18);
*(undefined4 *)(iVar2 + 0x14) = 0x20;
if (puVar1 == *(undefined4 **)(iVar2 + 0x1c)) {
*(undefined4 *)(iVar2 + 0x14) = 1;
uVar5 = uVar5 << 4;
*(undefined4 *)(iVar2 + 0x10) = 0;
*(undefined4 **)(iVar2 + 0x18) = puVar1 + 1;
}
else if (*(undefined4 **)(iVar2 + 0x1c) < puVar1) {
*(undefined1 *)(iVar2 + 4) = 1;
uVar5 = uVar5 << 4;
*(undefined4 *)(iVar2 + 0x10) = 0;
}
else {
uVar5 = uVar5 << 4;
*(undefined4 **)(iVar2 + 0x18) = puVar1 + 1;
*(undefined4 *)(iVar2 + 0x10) = *puVar1;
}
}
else {
uVar5 = uVar5 << 4;
*(uint *)(iVar2 + 0x10) = uVar4 >> 8;
}
}
}
else if (uVar4 == 0x30) {
iVar3 = *(int *)(iVar2 + 0x14);
uVar4 = *(uint *)(iVar2 + 0x10);
if (iVar3 < 0x1c) {
puVar7 = *(uint **)(iVar2 + 0x18);
if (puVar7 == *(uint **)(iVar2 + 0x1c)) goto LAB_0016b7a0;
if (*(uint **)(iVar2 + 0x1c) <= puVar7) goto LAB_0016b7c0;
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
uVar6 = *puVar7;
*(uint *)(iVar2 + 0x10) = uVar6;
if (*(char *)(iVar2 + 4) == '\0') {
local_24 = 0x1c - iVar3;
uVar4 = ((&CBitBuffer::s_nMaskTable)[local_24] & uVar6) << ((byte)iVar3 & 0x1f) |
uVar4;
iVar3 = iVar3 + 4;
goto LAB_0016b817;
}
LAB_0016b7b8:
uVar5 = 0;
}
else {
*(int *)(iVar2 + 0x14) = iVar3 + -0x1c;
uVar5 = uVar4 & 0xfffffff;
if (iVar3 + -0x1c == 0) goto LAB_0016b720;
uVar5 = uVar5 << 4;
*(uint *)(iVar2 + 0x10) = uVar4 >> 0x1c;
}
}
else {
if (uVar4 != 0x10) goto LAB_0016b483;
iVar3 = *(int *)(iVar2 + 0x14);
uVar4 = *(uint *)(iVar2 + 0x10);
if (iVar3 < 4) {
puVar7 = *(uint **)(iVar2 + 0x18);
if (puVar7 == *(uint **)(iVar2 + 0x1c)) goto LAB_0016b7a0;
if (*(uint **)(iVar2 + 0x1c) <= puVar7) goto LAB_0016b7c0;
*(uint **)(iVar2 + 0x18) = puVar7 + 1;
uVar6 = *puVar7;
*(uint *)(iVar2 + 0x10) = uVar6;
if (*(char *)(iVar2 + 4) != '\0') goto LAB_0016b7b8;
uVar5 = (&CBitBuffer::s_nMaskTable)[4 - iVar3];
*(int *)(iVar2 + 0x14) = iVar3 + 0x1c;
*(uint *)(iVar2 + 0x10) = uVar6 >> ((byte)(4 - iVar3) & 0x1f);
uVar5 = ((uVar5 & uVar6) << ((byte)iVar3 & 0x1f) | uVar4) << 4;
}
else {
*(int *)(iVar2 + 0x14) = iVar3 + -4;
uVar5 = uVar4 & 0xf;
if (iVar3 + -4 == 0) goto LAB_0016b720;
uVar5 = uVar5 << 4;
*(uint *)(iVar2 + 0x10) = uVar4 >> 4;
}
}
local_1c = local_1c & 0xf;
local_1c = uVar5 | local_1c;
}
LAB_0016b483:
iVar9 = iVar9 + local_1c;
local_14 = local_14 + 1;
puVar1 = (undefined4 *)(*(int *)(*(int *)(*(int *)(param_1 + 0xc) + 0x118) + 8) + iVar9 * 0xc)
;
puVar1[1] = 0xffffffff;
*puVar1 = 0;
} while (local_18 != local_14);
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.