Guest User

Untitled

a guest
Jul 16th, 2015
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. bool UpdateData::BuildPacket(WorldPacket *packet, bool hasTransport)
  2. {
  3.     //ByteBuffer buf(m_data.size() + 10 + m_outOfRangeGUIDs.size()*8);
  4.     ByteBuffer buf(4 + 1 + (m_outOfRangeGUIDs.empty() ? 0 : 1 + 4 + 9 * m_outOfRangeGUIDs.size()) + m_data.size());
  5.  
  6.     buf << uint32(!m_outOfRangeGUIDs.empty() ? m_blockCount + 1 : m_blockCount);
  7.     buf << uint8(hasTransport ? 1 : 0);
  8.  
  9.     if (!m_outOfRangeGUIDs.empty())
  10.     {
  11.         buf << uint8(UPDATETYPE_OUT_OF_RANGE_OBJECTS);
  12.         buf << uint32(m_outOfRangeGUIDs.size());
  13.  
  14.         for (std::set<uint64>::const_iterator i = m_outOfRangeGUIDs.begin();
  15.             i != m_outOfRangeGUIDs.end(); i++)
  16.         {
  17.             //buf.appendPackGUID(*i);
  18.             buf << uint8(0xFF);
  19.             buf << uint64(*i);
  20.         }
  21.     }
  22.  
  23.     buf.append(m_data);
  24.  
  25.     packet->clear();
  26.  
  27.     if (m_data.size() > 50)
  28.     {
  29.         uint32 destsize = buf.size() + buf.size()/10 + 16;
  30.         packet->resize(destsize);
  31.  
  32.         packet->put(0, (uint32)buf.size());
  33.  
  34.         Compress(const_cast<uint8*>(packet->contents()) + sizeof(uint32),
  35.             &destsize,
  36.             (void*)buf.contents(),
  37.             buf.size());
  38.         if (destsize == 0)
  39.             return false;
  40.  
  41.         packet->resize(destsize + sizeof(uint32));
  42.         packet->SetOpcode(SMSG_COMPRESSED_UPDATE_OBJECT);
  43.     }
  44.     else
  45.     {
  46.         packet->append(buf);
  47.         packet->SetOpcode(SMSG_UPDATE_OBJECT);
  48.     }
  49.  
  50.     return true;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment