本文整理汇总了C++中WorldPacket::readBits方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldPacket::readBits方法的具体用法?C++ WorldPacket::readBits怎么用?C++ WorldPacket::readBits使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldPacket
的用法示例。
在下文中一共展示了WorldPacket::readBits方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleChannelJoin
void WorldSession::HandleChannelJoin(WorldPacket& recvPacket)
{
CHECK_INWORLD_RETURN
CHECK_PACKET_SIZE(recvPacket, 1);
std::string channelname, pass;
uint32 channel_id;
recvPacket >> channel_id;
recvPacket.readBit(); // has voice
recvPacket.readBit(); // zone update
uint8 channelLength = recvPacket.readBits(8);
uint8 passwordLength = recvPacket.readBits(8);
channelname = recvPacket.ReadString(channelLength);
pass = recvPacket.ReadString(passwordLength);
if (sWorld.settings.gm.gmClientChannelName.size() && !stricmp(sWorld.settings.gm.gmClientChannelName.c_str(), channelname.c_str()) && !GetPermissionCount())
return;
Channel* channel = channelmgr.GetCreateChannel(channelname.c_str(), _player, channel_id);
if (channel == nullptr)
return;
channel->AttemptJoin(_player, pass.c_str());
LogDebugFlag(LF_OPCODE, "ChannelJoin %s", channelname.c_str());
}
示例2: HandleSendMail
void WorldSession::HandleSendMail(WorldPacket& recvData)
{
MailMessage msg;
ObjectGuid mailbox;
uint32_t unk1, unk2;
uint64_t money, COD;
std::vector< Item* > items;
Item* pItem;
recvData >> unk1;
recvData >> unk2;
recvData >> COD;
recvData >> money;
uint32_t bodyLength = recvData.readBits(12);
uint32_t subjectLength = recvData.readBits(9);
uint8_t items_count = static_cast<uint8_t>(recvData.readBits(5)); // attached items count
if (items_count > MAIL_MAX_ITEM_SLOT)
{
SendMailError(MAIL_ERR_TOO_MANY_ATTACHMENTS);
return;
}
mailbox[0] = recvData.readBit();
ObjectGuid itemGUIDs[MAIL_MAX_ITEM_SLOT];
for (uint8_t i = 0; i < items_count; ++i)
{
itemGUIDs[i][2] = recvData.readBit();
itemGUIDs[i][6] = recvData.readBit();
itemGUIDs[i][3] = recvData.readBit();
itemGUIDs[i][7] = recvData.readBit();
itemGUIDs[i][1] = recvData.readBit();
itemGUIDs[i][0] = recvData.readBit();
itemGUIDs[i][4] = recvData.readBit();
itemGUIDs[i][5] = recvData.readBit();
}
mailbox[3] = recvData.readBit();
mailbox[4] = recvData.readBit();
uint32_t receiverLength = recvData.readBits(7);
mailbox[2] = recvData.readBit();
mailbox[6] = recvData.readBit();
mailbox[1] = recvData.readBit();
mailbox[7] = recvData.readBit();
mailbox[5] = recvData.readBit();
recvData.ReadByteSeq(mailbox[4]);
for (uint8_t i = 0; i < items_count; ++i)
{
recvData.ReadByteSeq(itemGUIDs[i][6]);
recvData.ReadByteSeq(itemGUIDs[i][1]);
recvData.ReadByteSeq(itemGUIDs[i][7]);
recvData.ReadByteSeq(itemGUIDs[i][2]);
recvData.read_skip<uint8_t>(); // item slot in mail, not used
recvData.ReadByteSeq(itemGUIDs[i][3]);
recvData.ReadByteSeq(itemGUIDs[i][0]);
recvData.ReadByteSeq(itemGUIDs[i][4]);
recvData.ReadByteSeq(itemGUIDs[i][5]);
}
recvData.ReadByteSeq(mailbox[7]);
recvData.ReadByteSeq(mailbox[3]);
recvData.ReadByteSeq(mailbox[6]);
recvData.ReadByteSeq(mailbox[5]);
std::string subject = recvData.ReadString(subjectLength);
std::string receiver = recvData.ReadString(receiverLength);
recvData.ReadByteSeq(mailbox[2]);
recvData.ReadByteSeq(mailbox[0]);
std::string body = recvData.ReadString(bodyLength);
recvData.ReadByteSeq(mailbox[1]);
// Search for the recipient
PlayerInfo* player_info = ObjectMgr::getSingleton().GetPlayerInfoByName(receiver.c_str());
if (!player_info)
{
SendMailError(MAIL_ERR_RECIPIENT_NOT_FOUND);
return;
}
for (uint8_t i = 0; i < items_count; ++i)
{
pItem = _player->GetItemInterface()->GetItemByGUID(itemGUIDs[i]);
if (pItem == nullptr || pItem->isSoulbound() || pItem->hasFlags(ITEM_FLAG_CONJURED))
{
SendMailError(MAIL_ERR_INTERNAL_ERROR);
return;
}
if (pItem->isAccountbound() && GetAccountId() != player_info->acct) // don't mail account-bound items to another account
{
//.........这里部分代码省略.........
示例3: HandleMessagechatOpcode
//.........这里部分代码省略.........
switch (type)
{
case CHAT_MSG_EMOTE:
case CHAT_MSG_SAY:
case CHAT_MSG_YELL:
case CHAT_MSG_WHISPER:
case CHAT_MSG_CHANNEL:
case CHAT_MSG_PARTY:
case CHAT_MSG_PARTY_LEADER:
case CHAT_MSG_BATTLEGROUND:
case CHAT_MSG_BATTLEGROUND_LEADER:
case CHAT_MSG_RAID:
case CHAT_MSG_RAID_WARNING:
case CHAT_MSG_RAID_LEADER:
case CHAT_MSG_GUILD:
case CHAT_MSG_OFFICER:
{
if (m_muted && m_muted >= (uint32)UNIXTIME)
{
SystemMessage("Your voice is currently muted by a moderator.");
return;
}
}
break;
}
std::string msg, to = "", channel = "", tmp;
msg.reserve(256);
// Process packet
switch (type)
{
case CHAT_MSG_SAY:
msg = recv_data.ReadString(recv_data.readBits(9));
break;
default:
LOG_ERROR("CHAT: unknown msg type %u, lang: %u", type, lang);
}
if (int(msg.find("|T")) > -1)
{
GetPlayer()->BroadcastMessage("Don't even THINK about doing that again");
return;
}
// HookInterface OnChat event
if (pMsg && !sHookInterface.OnChat(_player, type, lang, pMsg, pMisc))
return;
Channel* chn = NULL;
// Main chat message processing
switch (type)
{
case CHAT_MSG_EMOTE:
{
if (sWorld.interfaction_chat && lang > 0)
lang = 0;
if (g_chatFilter->Parse(msg))
{
SystemMessage("Your chat message was blocked by a server-side filter.");
return;
}
if (GetPlayer()->m_modlanguage >= 0)