int __userpurge CLogin::OnSelectWorldResult@<eax>(int a1@<ebp>, int a2@<edi>, int a3)
{
_DWORD *v3; // ecx
_DWORD *v4; // edi
int v5; // ebx
int result; // eax
LONG *v7; // ecx
int v8; // eax
int v9; // ecx
int v10; // ebx
char *v11; // esi
unsigned int *v12; // eax
unsigned int *v13; // eax
int v14; // [esp-2Ch] [ebp-2Ch]
int v15; // [esp-2Ch] [ebp-2Ch]
SEHSetup();
v4 = v3;
v3[54] = 0;
if ( dword_7433E4 )
(*(**(dword_7433D4 + 260) + 48))(*(dword_7433D4 + 260), 3);
v5 = CInPacket::Decode1(*(a1 + 8));
result = v5 + 1;
switch ( v5 )
{
case -1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 8:
case 9:
case 10:
case 11:
case 13:
case 16:
case 17:
case 21:
goto LABEL_10;
case 7:
sub_4CF73D(0);
LABEL_10:
result = sub_4D7CBF(a1);
goto LABEL_11;
case 14:
result = sub_4D7A52(27);
if ( !result )
goto LABEL_11;
v14 = *StringPool::GetString(a1 - 24, 2380);
*(a1 - 4) = 0;
sub_62E601(v14, 0, a2);
*(a1 - 4) = -1;
v7 = (a1 - 24);
break;
case 15:
result = sub_4D7A52(26);
if ( !result )
goto LABEL_11;
v15 = *StringPool::GetString(a1 - 28, 2380);
*(a1 - 4) = 1;
sub_62E601(v15, 0, a2);
*(a1 - 4) = -1;
v7 = (a1 - 28);
break;
default:
goto LABEL_11;
}
result = ZXString_char_::_Release(v7);
LABEL_11:
if ( !v5 || v5 == 12 || v5 == 23 )
{
v8 = sub_458F13(v5, a1, v4, 0, *(dword_742AE8 + 8252), *(dword_742AE8 + 8220));
v9 = *(a1 + 8);
*(a1 - 36) = v8;
*(a1 - 32) = CInPacket::Decode1(v9);
*(a1 - 20) = 0;
v10 = 0;
*(a1 - 16) = 0;
do
{
if ( *(a1 - 20) >= *(a1 - 32) )
{
*(v4[59] + v10) = 0;
}
else
{
v11 = (v4[59] + v10);
sub_480364(v11, *(a1 + 8), 0);
AvatarLook::AvatarLook_2(v11 + 179, *(a1 + 8));
if ( CInPacket::Decode1(*(a1 + 8)) )
CInPacket::DecodeBuffer(*(a1 + 8), (*(a1 - 16) + v4[60]), 0x10u);
else
memset(*(a1 - 16) + v4[60], 0, 16);
if ( *(v10 + v4[59]) == *(a1 - 36) )
v4[58] = *(a1 - 20);
}
*(a1 - 16) += 16;
++*(a1 - 20);
v10 += 356;
}
while ( *(a1 - 16) < 48 );
v12 = ZAllocEx_ZAllocAnonSelector_::Alloc(a1, 128);
*(a1 + 8) = v12;
*(a1 - 4) = 2;
if ( v12 )
sub_4D2534(v4);
*(a1 - 4) = -1;
v13 = ZAllocEx_ZAllocAnonSelector_::Alloc(a1, 712);
*(a1 + 8) = v13;
*(a1 - 4) = 3;
if ( v13 )
sub_4D3F8C(v4, v4[59]);
*(a1 - 4) = -1;
return sub_4CC8FA(a1, dword_743EB8, -1);
}
return result;
}