void CLinkshellListPacket::AddPlayer(SearchEntity* PPlayer) { uint32 size_offset = m_offset / 8; m_offset += 8; m_offset = packBitsLE(m_data, SEARCH_NAME, m_offset, 5); m_offset = packBitsLE(m_data, strlen((const int8*)PPlayer->name), m_offset, 4); for (uint8 c = 0; c < strlen((const int8*)PPlayer->name); ++c) { m_offset = packBitsLE(m_data, PPlayer->name[c], m_offset, 7); } m_offset = packBitsLE(m_data, 1, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->zone, m_offset,10); if (!(PPlayer->flags1 & 0x4000)) { m_offset = packBitsLE(m_data, SEARCH_NATION, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->nation, m_offset, 2); m_offset = packBitsLE(m_data, SEARCH_JOB, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->mjob, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->sjob, m_offset, 5); m_offset = packBitsLE(m_data, SEARCH_LEVEL, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->mlvl, m_offset, 8); m_offset = packBitsLE(m_data, PPlayer->slvl, m_offset, 8); m_offset = packBitsLE(m_data, SEARCH_RACE, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->race, m_offset, 4); m_offset = packBitsLE(m_data, SEARCH_RANK, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->rank, m_offset, 8); } m_offset = packBitsLE(m_data, SEARCH_FLAGS1, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->flags1, m_offset,16); m_offset = packBitsLE(m_data, SEARCH_ID, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->id, m_offset,20); m_offset = packBitsLE(m_data, SEARCH_LINKSHELLRANK, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->linkshellrank1, m_offset, 8); //2=sack, 1=holder, 3=pearl m_offset = packBitsLE(m_data, PPlayer->linkshellrank2, m_offset, 8); m_offset = packBitsLE(m_data, 0, m_offset, 8); //linkshellrank3 m_offset = packBitsLE(m_data, PPlayer->linkshellid1, m_offset, 32); m_offset = packBitsLE(m_data, PPlayer->linkshellid2, m_offset, 32); m_offset = packBitsLE(m_data, 0, m_offset, 32); //linkshellid3 m_offset = packBitsLE(m_data, SEARCH_UNK0x0E, m_offset, 5); m_offset = packBitsLE(m_data, 0, m_offset, 32); if (PPlayer->comment != 0) { m_offset = packBitsLE(m_data, SEARCH_COMMENT, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->comment, m_offset,32); } m_offset = packBitsLE(m_data, SEARCH_FLAGS2, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->flags2, m_offset,32); m_offset = packBitsLE(m_data, SEARCH_LANGUAGE, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->languages, m_offset,16); if (m_offset%8 > 0) m_offset += 8 - m_offset%8; // побайтное выравнивание данных WBUFB(m_data, size_offset) = m_offset/8 - size_offset - 1; // размер данных сущности WBUFW(m_data,(0x08)) = m_offset / 8; // размер отправляемых данных delete PPlayer; }
void CSearchListPacket::AddPlayer(SearchEntity* PPlayer) { uint32 size_offset = m_offset / 8; m_offset += 8; m_offset = packBitsLE(m_data, SEARCH_NAME, m_offset, 5); m_offset = packBitsLE(m_data, strlen((const char*)PPlayer->name), m_offset, 4); auto length = strlen((const char*)PPlayer->name); for (uint8 c = 0; c < length; ++c) { m_offset = packBitsLE(m_data, PPlayer->name[c], m_offset, 7); } m_offset = packBitsLE(m_data, SEARCH_AREA, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->zone, m_offset, 10); if (!(PPlayer->flags1 & 0x4000)) { m_offset = packBitsLE(m_data, SEARCH_NATION, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->nation, m_offset, 2); m_offset = packBitsLE(m_data, SEARCH_JOB, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->mjob, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->sjob, m_offset, 5); m_offset = packBitsLE(m_data, SEARCH_LEVEL, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->mlvl, m_offset, 8); m_offset = packBitsLE(m_data, PPlayer->slvl, m_offset, 8); m_offset = packBitsLE(m_data, SEARCH_RACE, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->race, m_offset, 4); m_offset = packBitsLE(m_data, SEARCH_RANK, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->rank, m_offset, 8); } m_offset = packBitsLE(m_data, SEARCH_FLAGS1, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->flags1, m_offset, 16); m_offset = packBitsLE(m_data, SEARCH_ID, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->id, m_offset, 20); //m_offset = packBitsLE(m_data, SEARCH_LINKSHELLRANK, m_offset, 5); //m_offset = packBitsLE(m_data, 0, m_offset,8); m_offset = packBitsLE(m_data, SEARCH_UNK0x0E, m_offset, 5); m_offset = packBitsLE(m_data, 0, m_offset, 32); // TODO: search comments if (PPlayer->comment != 0) { m_offset = packBitsLE(m_data, SEARCH_COMMENT, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->comment, m_offset, 32); } m_offset = packBitsLE(m_data, SEARCH_FLAGS2, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->flags2, m_offset, 32); m_offset = packBitsLE(m_data, SEARCH_LANGUAGE, m_offset, 5); m_offset = packBitsLE(m_data, PPlayer->languages, m_offset, 16); if (m_offset % 8 > 0) m_offset += 8 - m_offset % 8; // побайтное выравнивание данных ref<uint8>(m_data, size_offset) = m_offset / 8 - size_offset - 1; // размер данных сущности ref<uint16>(m_data, (0x08)) = m_offset / 8; // размер отправляемых данных delete PPlayer; }