Skip to content

Instantly share code, notes, and snippets.

@Konctantin
Created April 17, 2019 06:39
Show Gist options
  • Select an option

  • Save Konctantin/2463b7f8f9b05642c9d250a3b3c5387f to your computer and use it in GitHub Desktop.

Select an option

Save Konctantin/2463b7f8f9b05642c9d250a3b3c5387f to your computer and use it in GitHub Desktop.
char __fastcall ClientCache::WriteCreatureRecord(__int64 a1, __int64 a2)
{
__int64 v2; // r13
__int64 v3; // r12
unsigned int v4; // ebx
unsigned int v5; // edi
unsigned int v6; // esi
char v7; // bl
unsigned int v8; // edx
char v9; // dl
char v10; // r9
_DWORD *v11; // r12
signed __int64 v12; // r14
unsigned int v13; // er15
unsigned int v14; // er8
char v15; // si
unsigned int v16; // er15
unsigned int v17; // er8
char v18; // si
signed __int64 v19; // r15
signed __int64 v20; // rbx
signed __int64 v21; // rdi
signed __int64 v22; // rsi
int *v23; // rbx
int *v24; // rbx
int v25; // edx
unsigned int v26; // eax
__int64 v27; // rsi
__int64 v28; // r12
signed __int64 v29; // rdi
int *v30; // rbx
int v31; // edx
int v32; // eax
__int64 v33; // rdi
signed __int64 v34; // rax
__int64 v36; // [rsp+20h] [rbp-10h]
__int16 v37; // [rsp+28h] [rbp-8h]
__int64 v38; // [rsp+70h] [rbp+40h]
__int64 v39; // [rsp+78h] [rbp+48h]
v39 = a2;
v38 = a1;
v2 = 0i64;
v36 = a2;
v3 = a1;
v37 = 0;
if ( *(_QWORD *)a1 )
v4 = *(_DWORD *)(a1 + 8) + 1;
else
v4 = 0;
CDataStore::PutInt8(a2, v4 >> 3);
CDataStore::PutBits3((__int64)&v36, v4 & 7);
if ( *(_QWORD *)(v3 + 16) )
v5 = *(_DWORD *)(v3 + 24) + 1;
else
v5 = 0;
v6 = v5 >> 3;
if ( HIBYTE(v37) )
{
v7 = HIBYTE(v37);
CDataStore::PutInt8(v36, ((unsigned __int8)v6 >> SHIBYTE(v37)) | ((_BYTE)v37 << (8 - HIBYTE(v37))));
LOBYTE(v37) = v6 & ((1 << v7) - 1);
}
else
{
CDataStore::PutInt8(v36, v6);
}
CDataStore::PutBits3((__int64)&v36, v5 & 7);
if ( *(_QWORD *)(v3 + 32) )
v8 = *(_DWORD *)(v3 + 40) + 1;
else
v8 = 0;
CDataStore::PutBits6((__int64)&v36, v8);
v9 = *(_BYTE *)(v3 + 136) | 2 * v37;
v10 = HIBYTE(v37) + 1;
LOBYTE(v37) = *(_BYTE *)(v3 + 136) | 2 * v37;
HIBYTE(v37) = v10;
if ( v10 == 8 )
{
CDataStore::PutInt8(v36, v9);
v10 = 0;
v37 = 0;
v9 = 0;
}
v11 = (_DWORD *)(v3 + 304);
v12 = 4i64;
while ( 1 )
{
v13 = *((_QWORD *)v11 - 9) ? *(v11 - 16) + 1 : 0;
v14 = v13 >> 3;
if ( v10 )
{
v15 = v10;
CDataStore::PutInt8(v36, ((unsigned __int8)v14 >> v10) | (v9 << (8 - v10)));
LOBYTE(v37) = (v13 >> 3) & ((1 << v15) - 1);
}
else
{
CDataStore::PutInt8(v36, v14);
}
CDataStore::PutBits3((__int64)&v36, v13 & 7);
v16 = *((_QWORD *)v11 - 1) ? *v11 + 1 : 0;
v17 = v16 >> 3;
if ( HIBYTE(v37) )
{
v18 = HIBYTE(v37);
CDataStore::PutInt8(v36, ((unsigned __int8)v17 >> SHIBYTE(v37)) | ((_BYTE)v37 << (8 - HIBYTE(v37))));
LOBYTE(v37) = (v16 >> 3) & ((1 << v18) - 1);
}
else
{
CDataStore::PutInt8(v36, v17);
}
CDataStore::PutBits3((__int64)&v36, v16 & 7);
v11 += 4;
if ( !--v12 )
break;
v10 = HIBYTE(v37);
v9 = v37;
}
switch ( HIBYTE(v37) )
{
case 1u:
CDataStore::PutBits7((__int64)&v36, 0);
break;
case 2u:
CDataStore::PutBits6((__int64)&v36, 0);
break;
case 3u:
CDataStore::PutBits5((__int64)&v36, 0);
break;
case 4u:
CDataStore::PutBits4((__int64)&v36, 0);
break;
case 5u:
CDataStore::PutBits3((__int64)&v36, 0);
break;
case 6u:
CDataStore::PutBits2((__int64)&v36, 0);
break;
case 7u:
if ( HIBYTE(v37) == 7 )
CDataStore::PutInt8(v36, 2 * v37);
break;
default:
break;
}
v19 = 4i64;
v20 = v38 + 296;
do
{
CDataStore::PutWowString2(v20 - 64, v39);
CDataStore::PutWowString2(v20, v39);
v20 += 16i64;
--v19;
}
while ( v19 );
v21 = 2i64;
v22 = 2i64;
v23 = (int *)(v38 + 216);
do
{
CDataStore::PutInt32(v39, *v23);
++v23;
--v22;
}
while ( v22 );
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 48));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 52));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 56));
v24 = (int *)(v38 + 224);
do
{
CDataStore::PutInt32(v39, *v24);
++v24;
--v21;
}
while ( v21 );
v25 = *(_DWORD *)(v38 + 112);
if ( v25 == -1 )
v25 = *(_DWORD *)(v38 + 64);
CDataStore::PutInt32(v39, v25);
CDataStore::PutFloat(v39, *(float *)(v38 + 120));
v26 = *(_DWORD *)(v38 + 112);
if ( v26 == -1 )
v26 = *(_DWORD *)(v38 + 64);
if ( (signed int)v26 > 0 )
{
v27 = 0i64;
v28 = v26;
do
{
if ( *(_DWORD *)(v38 + 112) == -1 )
v29 = *(_QWORD *)(v38 + 72);
else
v29 = v38 + 64;
CDataStore::PutInt32(v39, *(_DWORD *)(v27 + v29));
CDataStore::PutFloat(v39, *(float *)(v27 + v29 + 4));
CDataStore::PutFloat(v39, *(float *)(v27 + v29 + 8));
v27 += 12i64;
--v28;
}
while ( v28 );
}
CDataStore::PutFloat(v39, *(float *)(v38 + 128));
CDataStore::PutFloat(v39, *(float *)(v38 + 132));
v30 = (int *)(v38 + 144);
v31 = *(_DWORD *)(v38 + 176);
if ( v31 == -1 )
v31 = *v30;
CDataStore::PutInt32(v39, v31);
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 184));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 188));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 192));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 196));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 200));
CDataStore::PutFloat(v39, *(float *)(v38 + 204));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 208));
CDataStore::PutInt32(v39, *(_DWORD *)(v38 + 212));
CDataStore::PutWowString2(v38, v39);
CDataStore::PutWowString2(v38 + 16, v39);
CDataStore::PutWowString2(v38 + 32, v39);
v32 = *(_DWORD *)(v38 + 176);
if ( v32 == -1 )
v32 = *v30;
if ( v32 > 0 )
{
v33 = (unsigned int)v32;
do
{
if ( *(_DWORD *)(v38 + 176) == -1 )
v34 = *(_QWORD *)(v38 + 152);
else
v34 = v38 + 144;
CDataStore::PutInt32(v39, *(_DWORD *)(v34 + v2));
v2 += 4i64;
--v33;
}
while ( v33 );
}
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment