RecvTable_ReadInfos
0x0014f4a0 · 2494 bytes · __cdecl
_Z19RecvTable_ReadInfosP7bf_readi
Decompiled
undefined (2 params)
/* RecvTable_ReadInfos(bf_read*, int) */
SendTable * RecvTable_ReadInfos(bf_read *param_1,int param_2)
{
int iVar1;
undefined4 *puVar2;
uint uVar3;
SendTable *this;
undefined4 uVar4;
uint uVar5;
uint *puVar6;
uint uVar7;
SendProp SVar8;
SendProp *pSVar9;
int iVar10;
SendProp *this_00;
byte local_28;
uint local_20;
this = operator_new(0x14);
/* try { // try from 0014f4c0 to 0014f4c4 has its CatchHandler @ 0014ff24 */
SendTable::SendTable(this);
uVar4 = CBitRead::ReadAndAllocateString((CBitRead *)param_1,(bool *)0x0);
*(undefined4 *)(this + 8) = uVar4;
iVar10 = *(int *)(param_1 + 0x14);
if (iVar10 < 10) {
puVar6 = *(uint **)(param_1 + 0x18);
local_20 = *(uint *)(param_1 + 0x10);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar5 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar5;
if (param_1[4] == (bf_read)0x0) {
uVar7 = (&CBitBuffer::s_nMaskTable)[10 - iVar10];
*(int *)(param_1 + 0x14) = iVar10 + 0x16;
*(uint *)(param_1 + 0x10) = uVar5 >> ((byte)(10 - iVar10) & 0x1f);
local_20 = (uVar7 & uVar5) << ((byte)iVar10 & 0x1f) | local_20;
goto LAB_0014f506;
}
}
*(undefined4 *)(this + 4) = 0;
}
else {
*(int *)(param_1 + 0x14) = iVar10 + -10;
local_20 = *(uint *)(param_1 + 0x10) & 0x3ff;
if (iVar10 + -10 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 10;
}
LAB_0014f506:
*(uint *)(this + 4) = local_20;
if (local_20 != 0) {
uVar5 = 0xffffffff;
if (local_20 < 0x1840001) {
uVar5 = local_20 * 0x54 + 4;
}
puVar6 = operator_new__(uVar5);
pSVar9 = (SendProp *)(puVar6 + 1);
*puVar6 = local_20;
this_00 = pSVar9;
while (local_20 = local_20 - 1, local_20 != 0xffffffff) {
/* try { // try from 0014f55b to 0014f55f has its CatchHandler @ 0014ff39 */
SendProp::SendProp(this_00);
this_00 = this_00 + 0x54;
}
*(SendProp **)this = pSVar9;
if (*(int *)(this + 4) < 1) {
return this;
}
local_20 = 0;
do {
iVar10 = *(int *)(param_1 + 0x14);
if (iVar10 < 5) {
uVar5 = *(uint *)(param_1 + 0x10);
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar5 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
param_1[4] = (bf_read)0x1;
}
else {
if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar7 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar7;
if (param_1[4] == (bf_read)0x0) {
uVar3 = (&CBitBuffer::s_nMaskTable)[5 - iVar10];
*(int *)(param_1 + 0x14) = iVar10 + 0x1b;
uVar5 = (uVar3 & uVar7) << ((byte)iVar10 & 0x1f) | uVar5;
*(uint *)(param_1 + 0x10) = uVar7 >> ((byte)(5 - iVar10) & 0x1f);
goto LAB_0014f5ae;
}
}
uVar5 = 0;
}
}
else {
*(int *)(param_1 + 0x14) = iVar10 + -5;
uVar5 = *(uint *)(param_1 + 0x10) & 0x1f;
if (iVar10 + -5 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 5;
}
}
LAB_0014f5ae:
*(uint *)(pSVar9 + local_20 * 0x54 + 8) = uVar5;
uVar4 = CBitRead::ReadAndAllocateString((CBitRead *)param_1,(bool *)0x0);
*(undefined4 *)(pSVar9 + local_20 * 0x54 + 0x30) = uVar4;
iVar1 = *(int *)(param_1 + 0x14);
iVar10 = (uint)(param_2 != 2) * 8 + 0xb;
if (iVar1 < iVar10) {
uVar5 = *(uint *)(param_1 + 0x10);
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
*(undefined4 *)(param_1 + 0x10) = 0;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar7 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar7;
if (param_1[4] == (bf_read)0x0) {
iVar10 = iVar10 - iVar1;
uVar5 = ((&CBitBuffer::s_nMaskTable)[iVar10] & uVar7) << ((byte)iVar1 & 0x1f) | uVar5;
*(int *)(param_1 + 0x14) = 0x20 - iVar10;
*(uint *)(param_1 + 0x10) = uVar7 >> ((byte)iVar10 & 0x1f);
goto LAB_0014f5ff;
}
}
*(undefined4 *)(pSVar9 + local_20 * 0x54 + 0x3c) = 0;
iVar10 = *(int *)(param_1 + 0x14);
uVar5 = *(uint *)(param_1 + 0x10);
if (7 < iVar10) goto LAB_0014f611;
LAB_0014f817:
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar7 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar7;
if (param_1[4] == (bf_read)0x0) {
uVar3 = (&CBitBuffer::s_nMaskTable)[8 - iVar10];
*(int *)(param_1 + 0x14) = iVar10 + 0x18;
local_28 = (byte)uVar5;
SVar8 = (SendProp)((byte)((uVar3 & uVar7) << ((byte)iVar10 & 0x1f)) | local_28);
*(uint *)(param_1 + 0x10) = uVar7 >> ((byte)(8 - iVar10) & 0x1f);
goto LAB_0014f62d;
}
}
iVar10 = *(int *)(pSVar9 + local_20 * 0x54 + 8);
pSVar9[local_20 * 0x54 + 0x38] = (SendProp)0x0;
if (iVar10 == 6) goto LAB_0014f850;
LAB_0014f63c:
if ((*(uint *)(pSVar9 + local_20 * 0x54 + 0x3c) & 0x40) != 0) goto LAB_0014f850;
iVar1 = *(int *)(param_1 + 0x14);
uVar5 = 0;
if (iVar10 == 5) {
uVar7 = *(uint *)(param_1 + 0x10);
if (iVar1 < 10) {
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar3 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar3;
if (param_1[4] == (bf_read)0x0) {
uVar5 = (&CBitBuffer::s_nMaskTable)[10 - iVar1];
*(int *)(param_1 + 0x14) = iVar1 + 0x16;
uVar5 = (uVar5 & uVar3) << ((byte)iVar1 & 0x1f) | uVar7;
*(uint *)(param_1 + 0x10) = uVar3 >> ((byte)(10 - iVar1) & 0x1f);
}
}
}
else {
*(int *)(param_1 + 0x14) = iVar1 + -10;
uVar5 = uVar7 & 0x3ff;
if (iVar1 + -10 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar7 >> 10;
}
}
*(uint *)(pSVar9 + local_20 * 0x54 + 0x20) = uVar5;
}
else {
if (iVar1 < 0x20) {
uVar7 = *(uint *)(param_1 + 0x10);
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar3 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar3;
if (param_1[4] == (bf_read)0x0) {
*(int *)(param_1 + 0x14) = iVar1;
local_28 = (byte)(0x20 - iVar1);
uVar7 = (uVar3 & (&CBitBuffer::s_nMaskTable)[0x20 - iVar1]) <<
((byte)iVar1 & 0x1f) | uVar7;
*(uint *)(param_1 + 0x10) = uVar3 >> (local_28 & 0x1f);
goto LAB_0014f697;
}
}
uVar7 = 0;
}
else {
*(int *)(param_1 + 0x14) = iVar1 + -0x20;
uVar7 = *(uint *)(param_1 + 0x10);
if (iVar1 + -0x20 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
goto LAB_0014f68c;
}
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
LAB_0014f68c:
*(undefined4 *)(param_1 + 0x10) = 0;
}
}
LAB_0014f697:
*(uint *)(pSVar9 + local_20 * 0x54 + 0x10) = uVar7;
iVar10 = *(int *)(param_1 + 0x14);
if (iVar10 < 0x20) {
uVar7 = *(uint *)(param_1 + 0x10);
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar3 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar3;
if (param_1[4] == (bf_read)0x0) {
*(int *)(param_1 + 0x14) = iVar10;
local_28 = (byte)(0x20 - iVar10);
uVar7 = (uVar3 & (&CBitBuffer::s_nMaskTable)[0x20 - iVar10]) <<
((byte)iVar10 & 0x1f) | uVar7;
*(uint *)(param_1 + 0x10) = uVar3 >> (local_28 & 0x1f);
goto LAB_0014f6e2;
}
}
*(undefined4 *)(pSVar9 + local_20 * 0x54 + 0x14) = 0;
iVar10 = *(int *)(param_1 + 0x14);
uVar7 = *(uint *)(param_1 + 0x10);
if (5 < iVar10) goto LAB_0014f6f6;
LAB_0014f93a:
puVar6 = *(uint **)(param_1 + 0x18);
if (puVar6 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar6 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar6) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar6 + 1;
uVar3 = *puVar6;
*(uint *)(param_1 + 0x10) = uVar3;
if (param_1[4] == (bf_read)0x0) {
uVar5 = (&CBitBuffer::s_nMaskTable)[6 - iVar10];
*(int *)(param_1 + 0x14) = iVar10 + 0x1a;
uVar5 = (uVar5 & uVar3) << ((byte)iVar10 & 0x1f) | uVar7;
*(uint *)(param_1 + 0x10) = uVar3 >> ((byte)(6 - iVar10) & 0x1f);
}
}
}
else {
*(int *)(param_1 + 0x14) = iVar10 + -0x20;
uVar7 = *(uint *)(param_1 + 0x10);
if (iVar10 + -0x20 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
goto LAB_0014f6d7;
}
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
LAB_0014f6d7:
*(undefined4 *)(param_1 + 0x10) = 0;
}
LAB_0014f6e2:
*(uint *)(pSVar9 + local_20 * 0x54 + 0x14) = uVar7;
iVar10 = *(int *)(param_1 + 0x14);
uVar7 = *(uint *)(param_1 + 0x10);
if (iVar10 < 6) goto LAB_0014f93a;
LAB_0014f6f6:
*(int *)(param_1 + 0x14) = iVar10 + -6;
uVar5 = uVar7 & 0x3f;
if (iVar10 + -6 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar7 >> 6;
}
}
*(uint *)(pSVar9 + local_20 * 0x54 + 0xc) = uVar5;
}
}
else {
uVar5 = (&CBitBuffer::s_nMaskTable)[iVar10];
*(int *)(param_1 + 0x14) = iVar1 - iVar10;
uVar5 = uVar5 & *(uint *)(param_1 + 0x10);
if (iVar1 - iVar10 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> (sbyte)iVar10;
}
LAB_0014f5ff:
*(uint *)(pSVar9 + local_20 * 0x54 + 0x3c) = uVar5;
iVar10 = *(int *)(param_1 + 0x14);
uVar5 = *(uint *)(param_1 + 0x10);
if (iVar10 < 8) goto LAB_0014f817;
LAB_0014f611:
*(int *)(param_1 + 0x14) = iVar10 + -8;
SVar8 = SUB41(uVar5,0);
if (iVar10 + -8 == 0) {
puVar2 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar2;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar5 >> 8;
}
LAB_0014f62d:
iVar10 = *(int *)(pSVar9 + local_20 * 0x54 + 8);
pSVar9[local_20 * 0x54 + 0x38] = SVar8;
if (iVar10 != 6) goto LAB_0014f63c;
LAB_0014f850:
uVar4 = CBitRead::ReadAndAllocateString((CBitRead *)param_1,(bool *)0x0);
*(undefined4 *)(pSVar9 + local_20 * 0x54 + 0x28) = uVar4;
}
local_20 = local_20 + 1;
if (*(int *)(this + 4) <= (int)local_20) {
return this;
}
pSVar9 = *(SendProp **)this;
} while( true );
}
}
*(undefined4 *)this = 0;
return this;
}
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.