CNetworkStringTable::ParseUpdate
0x001a5dc0 · 3558 bytes · __thiscall
_ZN19CNetworkStringTable11ParseUpdateER7bf_readi
Decompiled
undefined (3 params)
/* CNetworkStringTable::ParseUpdate(bf_read&, int) */
void __thiscall
CNetworkStringTable::ParseUpdate(CNetworkStringTable *this,bf_read *param_1,int param_2)
{
bf_read *pbVar1;
uint uVar2;
undefined4 *puVar3;
uint *puVar4;
int iVar5;
int iVar6;
undefined4 uVar7;
char *pcVar8;
uint uVar9;
uint uVar10;
uint *puVar11;
int iVar12;
uint uVar13;
uint *puVar14;
int in_GS_OFFSET;
bool bVar15;
bool bVar16;
byte local_4880;
uint local_4878;
CUtlMemory<StringHistoryEntry,int> *local_4874;
undefined1 *local_486c;
int local_4868;
char *local_4864;
uint local_4860;
int local_4854 [5];
StringHistoryEntry local_4840 [32];
char local_4820 [1024];
char local_4420 [1023];
undefined1 auStack_4021 [16385];
int local_20;
iVar5 = DAT_003ab3a8;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
uVar2 = *(uint *)(param_1 + 0x10);
pbVar1 = param_1 + 0x14;
*(int *)pbVar1 = *(int *)pbVar1 + -1;
if (*(int *)pbVar1 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar2 >> 1;
}
local_4854[0] = 0;
local_4854[1] = 0;
local_4854[2] = 0;
local_4854[3] = 0;
local_4854[4] = 0;
if (0 < param_2) {
local_4868 = 0;
local_4878 = 0xffffffff;
local_4860 = 0xffffffff;
do {
uVar10 = *(uint *)(param_1 + 0x10) & 1;
pbVar1 = param_1 + 0x14;
*(int *)pbVar1 = *(int *)pbVar1 + -1;
if (*(int *)pbVar1 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
if (uVar10 == 0) goto LAB_001a62b9;
LAB_001a5ecc:
local_4860 = local_4860 + 1;
LAB_001a5ed3:
if ((int)local_4860 < 0) goto LAB_001a6300;
LAB_001a5ee1:
/* try { // try from 001a5ee6 to 001a66d1 has its CatchHandler @ 001a6c82 */
iVar12 = (**(code **)(*(int *)this + 0x14))(this);
if (iVar12 <= (int)local_4860) goto LAB_001a6300;
}
else {
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 1;
if (uVar10 != 0) goto LAB_001a5ecc;
LAB_001a62b9:
iVar6 = (**(code **)(*(int *)this + 0x18))(this);
iVar12 = *(int *)(param_1 + 0x14);
uVar10 = *(uint *)(param_1 + 0x10);
if (iVar12 < iVar6) {
puVar4 = *(uint **)(param_1 + 0x18);
if (puVar4 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar4) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar9;
if (param_1[4] == (bf_read)0x0) {
iVar6 = iVar6 - iVar12;
uVar13 = (&CBitBuffer::s_nMaskTable)[iVar6];
*(int *)(param_1 + 0x14) = 0x20 - iVar6;
*(uint *)(param_1 + 0x10) = uVar9 >> ((byte)iVar6 & 0x1f);
local_4860 = (uVar13 & uVar9) << ((byte)iVar12 & 0x1f) | uVar10;
goto LAB_001a5ed3;
}
}
local_4860 = 0;
goto LAB_001a5ee1;
}
local_4860 = (&CBitBuffer::s_nMaskTable)[iVar6];
*(int *)(param_1 + 0x14) = iVar12 - iVar6;
local_4860 = local_4860 & uVar10;
if (iVar12 - iVar6 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
goto LAB_001a5ed3;
}
*(uint *)(param_1 + 0x10) = uVar10 >> ((byte)iVar6 & 0x1f);
if (-1 < (int)local_4860) goto LAB_001a5ee1;
LAB_001a6300:
uVar7 = (**(code **)(*(int *)this + 8))(this);
Host_Error("Server sent bogus string index %i for table %s\n",local_4860,uVar7);
}
iVar6 = *(int *)(param_1 + 0x14);
iVar12 = iVar6 + -1;
*(int *)(param_1 + 0x14) = iVar12;
uVar10 = *(uint *)(param_1 + 0x10) & 1;
if (iVar12 == 0) {
puVar4 = *(uint **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
uVar13 = 0;
if (puVar4 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
iVar6 = 0;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else if (*(uint **)(param_1 + 0x1c) < puVar4) {
param_1[4] = (bf_read)0x1;
iVar6 = 0x1f;
uVar9 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
iVar6 = 0x1f;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar9;
uVar13 = uVar9 & 1;
}
if (uVar10 == 0) goto LAB_001a6345;
LAB_001a5f41:
uVar10 = uVar13;
if ((uVar2 & 1) == 0) {
LAB_001a5f8d:
*(int *)(param_1 + 0x14) = iVar6;
if (iVar6 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar9 >> 1;
}
if (uVar10 == 0) {
CBitRead::ReadString((CBitRead *)param_1,local_4820,0x400,false,(int *)0x0);
}
else {
iVar12 = *(int *)(param_1 + 0x14);
uVar10 = *(uint *)(param_1 + 0x10);
if (iVar12 < 5) {
puVar4 = *(uint **)(param_1 + 0x18);
puVar14 = *(uint **)(param_1 + 0x1c);
if (puVar4 == puVar14) {
puVar11 = puVar4 + 1;
*(undefined4 *)(param_1 + 0x14) = 1;
iVar12 = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar11;
param_1[4] = (bf_read)0x1;
}
else {
if (puVar4 <= puVar14) {
puVar11 = puVar4 + 1;
*(uint **)(param_1 + 0x18) = puVar11;
uVar9 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar9;
if (param_1[4] != (bf_read)0x0) {
local_4864 = (char *)0x0;
goto LAB_001a6619;
}
uVar13 = (&CBitBuffer::s_nMaskTable)[5 - iVar12] & uVar9;
*(int *)(param_1 + 0x14) = iVar12 + 0x1b;
uVar9 = uVar9 >> ((byte)(5 - iVar12) & 0x1f);
*(uint *)(param_1 + 0x10) = uVar9;
local_4864 = (char *)(uVar13 << ((byte)iVar12 & 0x1f) | uVar10);
iVar12 = iVar12 + 0x1b;
goto joined_r0x001a6945;
}
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
puVar11 = puVar4;
}
local_4864 = (char *)0x0;
uVar9 = 0;
LAB_001a6619:
bVar15 = puVar11 < puVar14;
bVar16 = false;
if (puVar11 == puVar14) {
LAB_001a6959:
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar11 + 1;
param_1[4] = (bf_read)0x1;
}
else {
LAB_001a6621:
if (bVar15 || bVar16) {
*(uint **)(param_1 + 0x18) = puVar11 + 1;
uVar13 = *puVar11;
*(uint *)(param_1 + 0x10) = uVar13;
if (param_1[4] == (bf_read)0x0) {
uVar10 = (&CBitBuffer::s_nMaskTable)[5 - iVar12];
uVar7 = *(undefined4 *)(param_1 + 0x14);
*(int *)(param_1 + 0x14) = iVar12 + 0x1b;
local_486c._0_1_ = (byte)(5 - iVar12);
uVar10 = (uVar13 & uVar10) << ((byte)uVar7 & 0x1f) | uVar9;
*(uint *)(param_1 + 0x10) = uVar13 >> ((byte)local_486c & 0x1f);
goto joined_r0x001a6640;
}
}
else {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
}
uVar10 = 0;
}
else {
iVar12 = iVar12 + -5;
*(int *)(param_1 + 0x14) = iVar12;
local_4864 = (char *)(uVar10 & 0x1f);
if (iVar12 == 0) {
puVar4 = *(uint **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
puVar14 = *(uint **)(param_1 + 0x1c);
if (puVar4 == puVar14) {
puVar11 = puVar14 + 1;
*(undefined4 *)(param_1 + 0x14) = 1;
uVar9 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
iVar12 = 1;
*(uint **)(param_1 + 0x18) = puVar11;
goto LAB_001a6619;
}
if (puVar14 < puVar4) {
param_1[4] = (bf_read)0x1;
uVar9 = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = *puVar4;
}
*(undefined4 *)(param_1 + 0x14) = 0x1b;
uVar10 = uVar9 & 0x1f;
LAB_001a6820:
*(uint *)(param_1 + 0x10) = uVar9 >> 5;
}
else {
uVar9 = uVar10 >> 5;
*(uint *)(param_1 + 0x10) = uVar9;
joined_r0x001a6945:
if (iVar12 < 5) {
puVar11 = *(uint **)(param_1 + 0x18);
bVar15 = puVar11 < *(uint **)(param_1 + 0x1c);
bVar16 = puVar11 == *(uint **)(param_1 + 0x1c);
if (!bVar16) goto LAB_001a6621;
goto LAB_001a6959;
}
*(int *)(param_1 + 0x14) = iVar12 + -5;
uVar10 = uVar9 & 0x1f;
if (iVar12 + -5 != 0) goto LAB_001a6820;
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
}
joined_r0x001a6640:
if ((uint)local_4854[3] <= local_4864) {
uVar7 = (**(code **)(*(int *)this + 8))(this);
Host_Error("Server sent bogus substring index %i for table %s\n",local_4860,uVar7);
}
uVar9 = 0x400;
if (uVar10 + 1 < 0x401) {
uVar9 = uVar10 + 1;
}
V_strncpy(local_4820,(char *)((int)local_4864 * 0x20 + local_4854[0]),uVar9);
CBitRead::ReadString((CBitRead *)param_1,local_4420,0x400,false,(int *)0x0);
V_strncat(local_4820,local_4420,0x400,-1);
}
}
else {
*(int *)(param_1 + 0x14) = iVar6;
if (iVar6 == 0) {
puVar4 = *(uint **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar4 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
uVar10 = 0;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else if (*(uint **)(param_1 + 0x1c) < puVar4) {
param_1[4] = (bf_read)0x1;
uVar10 = 0;
iVar6 = 0x1f;
*(undefined4 *)(param_1 + 0x10) = 0;
uVar9 = 0;
}
else {
iVar6 = 0x1f;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar9;
uVar10 = uVar9 & 1;
}
}
else {
uVar9 = uVar9 >> 1;
iVar6 = iVar6 + -1;
*(uint *)(param_1 + 0x10) = uVar9;
uVar10 = uVar9 & 1;
}
if (uVar13 == 0) goto LAB_001a5f8d;
*(int *)(param_1 + 0x14) = iVar6;
if (iVar6 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar9 >> 1;
}
if (uVar10 == 0) {
iVar12 = *(int *)(param_1 + 0x14);
uVar10 = *(uint *)(param_1 + 0x10);
if (iVar12 < iVar5) {
puVar4 = *(uint **)(param_1 + 0x18);
if (puVar4 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar4) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar9 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar9;
if (param_1[4] == (bf_read)0x0) {
iVar6 = iVar5 - iVar12;
uVar13 = (&CBitBuffer::s_nMaskTable)[iVar6];
*(int *)(param_1 + 0x14) = 0x20 - iVar6;
*(uint *)(param_1 + 0x10) = uVar9 >> ((byte)iVar6 & 0x1f);
local_4878 = (uVar13 & uVar9) << ((byte)iVar12 & 0x1f) | uVar10;
goto LAB_001a649a;
}
}
local_4878 = 0;
}
else {
local_4878 = (&CBitBuffer::s_nMaskTable)[iVar5];
*(int *)(param_1 + 0x14) = iVar12 - iVar5;
local_4878 = local_4878 & uVar10;
if (iVar12 - iVar5 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
else {
local_4880 = (byte)iVar5;
*(uint *)(param_1 + 0x10) = uVar10 >> (local_4880 & 0x1f);
}
}
}
else {
local_4878 = local_4878 + 1;
}
LAB_001a649a:
pcVar8 = (char *)CNetworkStringTableDictionaryManager::Lookup
((CNetworkStringTableDictionaryManager *)
&g_StringTableDictionary,local_4878);
V_strncpy(local_4820,pcVar8,0x400);
}
uVar9 = *(uint *)(param_1 + 0x10);
iVar6 = *(int *)(param_1 + 0x14) + -1;
local_4864 = local_4820;
uVar13 = uVar9 & 1;
}
else {
uVar9 = *(uint *)(param_1 + 0x10) >> 1;
iVar6 = iVar6 + -2;
*(uint *)(param_1 + 0x10) = uVar9;
uVar13 = uVar9 & 1;
if (uVar10 != 0) goto LAB_001a5f41;
LAB_001a6345:
local_4864 = (char *)0x0;
}
memset(auStack_4021 + 1,0,0x4000);
*(int *)(param_1 + 0x14) = iVar6;
if (iVar6 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
if (uVar13 == 0) goto LAB_001a6365;
LAB_001a6161:
if (((byte)this[0x1c] & 8) == 0) {
iVar12 = *(int *)(param_1 + 0x14);
uVar9 = *(uint *)(param_1 + 0x10);
if (iVar12 < 0xe) {
puVar4 = *(uint **)(param_1 + 0x18);
if (puVar4 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
uVar10 = 0;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar4 + 1;
param_1[4] = (bf_read)0x1;
}
else {
if (*(uint **)(param_1 + 0x1c) < puVar4) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar4 + 1;
uVar13 = *puVar4;
*(uint *)(param_1 + 0x10) = uVar13;
if (param_1[4] == (bf_read)0x0) {
uVar10 = (&CBitBuffer::s_nMaskTable)[0xe - iVar12];
*(int *)(param_1 + 0x14) = iVar12 + 0x12;
uVar10 = (uVar10 & uVar13) << ((byte)iVar12 & 0x1f) | uVar9;
*(uint *)(param_1 + 0x10) = uVar13 >> ((byte)(0xe - iVar12) & 0x1f);
goto LAB_001a6196;
}
}
uVar10 = 0;
}
}
else {
*(int *)(param_1 + 0x14) = iVar12 + -0xe;
uVar10 = uVar9 & 0x3fff;
if (iVar12 + -0xe == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x1c) < puVar3) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x10) = uVar9 >> 0xe;
}
LAB_001a6196:
if (0x4000 < uVar10) {
Error("CNetworkStringTableClient::ParseUpdate: message too large (%d bytes).",uVar10);
}
}
CBitRead::ReadBytes((CBitRead *)param_1,auStack_4021 + 1,uVar10);
}
else {
iVar12 = *(int *)(this + 0x28);
uVar10 = *(uint *)(this + 0x24);
auStack_4021[uVar10] = 0;
CBitRead::ReadBits((CBitRead *)param_1,auStack_4021 + 1,iVar12);
}
local_486c = auStack_4021 + 1;
}
else {
*(uint *)(param_1 + 0x10) = uVar9 >> 1;
if (uVar13 != 0) goto LAB_001a6161;
LAB_001a6365:
local_486c = (undefined1 *)0x0;
uVar10 = 0;
}
iVar12 = (**(code **)(*(int *)this + 0x10))(this);
if ((int)local_4860 < iVar12) {
(**(code **)(*(int *)this + 0x2c))(this,local_4860,uVar10,local_486c);
local_4864 = (char *)(**(code **)(*(int *)this + 0x28))(this,local_4860);
}
else {
if (local_4864 == (char *)0x0) {
uVar7 = (**(code **)(*(int *)this + 8))(this);
Msg("CNetworkStringTable::ParseUpdate: NULL pEntry, table %s, index %i\n",uVar7,local_4860
);
local_4864 = "";
}
(**(code **)(*(int *)this + 0x24))(this,1,local_4864,uVar10,local_486c);
}
if (0x1f < local_4854[3]) {
CUtlVector<StringHistoryEntry,CUtlMemory<StringHistoryEntry,int>>::ShiftElementsLeft
((CUtlVector<StringHistoryEntry,CUtlMemory<StringHistoryEntry,int>> *)local_4854,0
,1);
local_4854[3] = local_4854[3] - 1;
}
V_strncpy((char *)local_4840,local_4864,0x20);
CUtlVector<StringHistoryEntry,CUtlMemory<StringHistoryEntry,int>>::InsertBefore
((CUtlVector<StringHistoryEntry,CUtlMemory<StringHistoryEntry,int>> *)local_4854,
local_4854[3],local_4840);
local_4868 = local_4868 + 1;
} while (local_4868 != param_2);
}
local_4874 = (CUtlMemory<StringHistoryEntry,int> *)local_4854;
local_4854[3] = 0;
CUtlMemory<StringHistoryEntry,int>::Purge(local_4874);
local_4854[4] = local_4854[0];
CUtlMemory<StringHistoryEntry,int>::Purge(local_4874);
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
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.