int __userpurge CLogin::OnWorldInformation@<eax>(int a1@<ebp>, int a2@<edi>, int a3)
{
int v3; // edi
int v4; // ecx
int v5; // esi
int v6; // ebx
int v7; // eax
unsigned int *v8; // eax
int result; // eax
int v10; // esi
void **v11; // eax
void **v12; // eax
int v13; // esi
void **v14; // eax
bool v15; // zf
SEHSetup();
v3 = *(_DWORD *)(a1 + 8);
v5 = v4;
v6 = CInPacket::Decode1(v3);
if ( v6 >= 0 )
{
v10 = sub_4D03EC(-1);
*(_DWORD *)v10 = v6;
v11 = CInPacket::DecodeStr(a1, a1 + 8);
*(_DWORD *)(a1 - 4) = 2;
ZXString_char_::operator_((void **)(v10 + 4), v11);
*(_DWORD *)(a1 - 4) = -1;
ZXString_char_::_Release((LONG *)(a1 + 8));
*(_DWORD *)(v10 + 8) = (unsigned __int8)CInPacket::Decode1(v3);
v12 = CInPacket::DecodeStr(a1, a1 + 8);
*(_DWORD *)(a1 - 4) = 3;
ZXString_char_::operator_((void **)(v10 + 12), v12);
*(_DWORD *)(a1 - 4) = -1;
ZXString_char_::_Release((LONG *)(a1 + 8));
*(_DWORD *)(v10 + 16) = (unsigned __int8)CInPacket::Decode1(v3);
result = (unsigned __int8)CInPacket::Decode1(v3);
if ( (_BYTE)result )
{
*(_DWORD *)(a1 - 16) = v10 + 20;
*(_DWORD *)(a1 + 8) = (unsigned __int8)result;
do
{
v13 = sub_4D032A(-1);
v14 = CInPacket::DecodeStr(a1, a1 - 20);
*(_DWORD *)(a1 - 4) = 4;
ZXString_char_::operator_((void **)v13, v14);
*(_DWORD *)(a1 - 4) = -1;
ZXString_char_::_Release((LONG *)(a1 - 20));
*(_DWORD *)(v13 + 4) = CInPacket::Decode4(v3);
*(_DWORD *)(v13 + 8) = (unsigned __int8)CInPacket::Decode1(v3);
*(_DWORD *)(v13 + 12) = (unsigned __int8)CInPacket::Decode1(v3);
LOBYTE(result) = CInPacket::Decode1(v3);
v15 = (*(_DWORD *)(a1 + 8))-- == 1;
result = (unsigned __int8)result;
*(_DWORD *)(v13 + 16) = (unsigned __int8)result;
}
while ( !v15 );
}
}
else
{
if ( *(_BYTE *)(v5 + 264) == 1 && sub_4D783A(30, 0) && !*(_DWORD *)(v5 + 208) )
{
v7 = *(_DWORD *)StringPool::GetString(a1 + 8, 8);
*(_DWORD *)(a1 - 4) = 0;
sub_62E601(v7, 0, a2);
*(_DWORD *)(a1 - 4) = -1;
ZXString_char_::_Release((LONG *)(a1 + 8));
}
if ( dword_7433D8 )
{
sub_4E4C8F();
}
else
{
v8 = ZAllocEx_ZAllocAnonSelector_::Alloc(a1, 296);
*(_DWORD *)(a1 + 8) = v8;
*(_DWORD *)(a1 - 4) = 1;
if ( v8 )
sub_4E48B9(v5);
*(_DWORD *)(a1 - 4) = -1;
}
return sub_4CC8FA(a1, v5, 1);
}
return result;
}