コード例 #1
0
ファイル: linkshell_list.cpp プロジェクト: Ex0r/darkstar
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;
}
コード例 #2
0
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;
}