Untitled

 avatar
unknown
c_cpp
2 years ago
4.1 kB
8
Indexable
void __thiscall CLogin::OnWorldInformation(CLogin *this, CInPacket *iPacket)
{
  CLogin *v2; // ebp
  CInPacket *v3; // esi
  int v4; // ebx
  CInPacket *v5; // eax
  CLogin::WORLDITEM *v6; // edi
  const ZXString<char> *v7; // eax
  const ZXString<char> *v8; // eax
  unsigned __int8 v9; // al
  int v10; // ebx
  ZArray<CLogin::CHANNELITEM> *p_ci; // ebp
  CLogin::CHANNELITEM *v12; // edi
  const ZXString<char> *v13; // eax
  int m_nBalloonCount; // eax
  const ZXString<char> *v15; // eax
  CLogin::BALLOON *v16; // eax
  int nY; // ecx
  bool v18; // cc
  ZXString<char> result; // [esp+18h] [ebp-1Ch] BYREF
  CLogin::BALLOON baTemp; // [esp+1Ch] [ebp-18h] BYREF
  int v22; // [esp+30h] [ebp-4h]

  v2 = this;
  v3 = iPacket;
  v4 = (char)CInPacket::Decode1(iPacket);
  if ( v4 >= 0 )
  {
    v6 = ZArray<CLogin::WORLDITEM>::InsertBefore(&v2->m_WorldItem, -1);
    v6->nWorldID = v4;
    v7 = CInPacket::DecodeStr(v3, (ZXString<char> *)&iPacket);
    ZXString<char>::operator=(&v6->sName, v7);
    v22 = -1;
    if ( iPacket )
      ZXString<char>::_Release((ZXString<char>::_ZXStringData *)&iPacket[-1].m_uLength);
    v6->nWorldState = CInPacket::Decode1(v3);
    v8 = CInPacket::DecodeStr(v3, (ZXString<char> *)&iPacket);
    ZXString<char>::operator=(&v6->sWorldEventDesc, v8);
    v22 = -1;
    if ( iPacket )
      ZXString<char>::_Release((ZXString<char>::_ZXStringData *)&iPacket[-1].m_uLength);
    v6->nWorldEventEXP_WSE = CInPacket::Decode2(v3);
    v6->nWorldEventDrop_WSE = CInPacket::Decode2(v3);
    v6->nBlockCharCreation = CInPacket::Decode1(v3);
    v9 = CInPacket::Decode1(v3);
    v10 = v9;
    if ( v9 )
    {
      p_ci = &v6->ci;
      do
      {
        v12 = ZArray<CLogin::CHANNELITEM>::InsertBefore(p_ci, -1);
        v13 = CInPacket::DecodeStr(v3, (ZXString<char> *)&iPacket);
        ZXString<char>::operator=(&v12->sName, v13);
        v22 = -1;
        if ( iPacket )
          ZXString<char>::_Release((ZXString<char>::_ZXStringData *)&iPacket[-1].m_uLength);
        v12->nUserNo = CInPacket::Decode4(v3);
        v12->nWorldID = CInPacket::Decode1(v3);
        v12->nChannelID = CInPacket::Decode1(v3);
        --v10;
        v12->bAdultChannel = CInPacket::Decode1(v3);
      }
      while ( v10 > 0 );
      v2 = this;
    }
    v2->m_nBalloonCount = CInPacket::Decode2(v3);
    ZArray<CLogin::BALLOON>::RemoveAll(&v2->m_aBalloon);
    m_nBalloonCount = v2->m_nBalloonCount;
    if ( m_nBalloonCount )
    {
      iPacket = 0;
      if ( m_nBalloonCount > 0 )
      {
        do
        {
          baTemp.sMessage._m_pStr = 0;
          v22 = 4;
          baTemp.nX = CInPacket::Decode2(v3);
          baTemp.nY = CInPacket::Decode2(v3);
          v15 = CInPacket::DecodeStr(v3, &result);
          LOBYTE(v22) = 5;
          ZXString<char>::operator=(&baTemp.sMessage, v15);
          LOBYTE(v22) = 4;
          if ( result._m_pStr )
            ZXString<char>::_Release((ZXString<char>::_ZXStringData *)result._m_pStr - 1);
          v16 = ZArray<CLogin::BALLOON>::InsertBefore(&v2->m_aBalloon, -1);
          nY = baTemp.nY;
          v16->nX = baTemp.nX;
          v16->nY = nY;
          ZXString<char>::operator=(&v16->sMessage, &baTemp.sMessage);
          v22 = -1;
          if ( baTemp.sMessage._m_pStr )
            ZXString<char>::_Release((ZXString<char>::_ZXStringData *)baTemp.sMessage._m_pStr - 1);
          v18 = (int)&iPacket->m_bLoopback + 1 < v2->m_nBalloonCount;
          iPacket = (CInPacket *)((char *)iPacket + 1);
        }
        while ( v18 );
      }
    }
  }
  else if ( TSingleton<CUIWorldSelect>::ms_pInstance )
  {
    CUIWorldSelect::DrawWorldItems(TSingleton<CUIWorldSelect>::ms_pInstance);
    CLogin::ChangeStep(v2, 1);
  }
  else
  {
    v5 = (CInPacket *)ZAllocEx<ZAllocAnonSelector>::Alloc(&ZAllocEx<ZAllocAnonSelector>::_s_alloc, 0x1D8u);
    iPacket = v5;
    v22 = 0;
    if ( v5 )
      CUIWorldSelect::CUIWorldSelect((CUIWorldSelect *)v5, v2);
    v22 = -1;
    CLogin::ChangeStep(v2, 1);
  }
}
Editor is loading...