本文整理汇总了C++中WorldPacket::ReadByteSeq方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldPacket::ReadByteSeq方法的具体用法?C++ WorldPacket::ReadByteSeq怎么用?C++ WorldPacket::ReadByteSeq使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldPacket
的用法示例。
在下文中一共展示了WorldPacket::ReadByteSeq方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleOfferPetitionOpcode
void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_OFFER_PETITION");
ObjectGuid petitionGuid, playerGuid;
uint32 type, junk;
Player* player;
ObjectGuid guid1;
ObjectGuid guid2;
recvData >> junk; // this is not petition type!
guid1[3] = recvData.ReadBit();
guid1[2] = recvData.ReadBit();
guid1[5] = recvData.ReadBit();
guid2[4] = recvData.ReadBit();
guid1[7] = recvData.ReadBit();
guid1[6] = recvData.ReadBit();
guid2[3] = recvData.ReadBit();
guid2[7] = recvData.ReadBit();
guid2[0] = recvData.ReadBit();
guid1[4] = recvData.ReadBit();
guid2[1] = recvData.ReadBit();
guid2[6] = recvData.ReadBit();
guid2[2] = recvData.ReadBit();
guid1[1] = recvData.ReadBit();
guid2[5] = recvData.ReadBit();
guid1[0] = recvData.ReadBit();
recvData.FlushBits();
recvData.ReadByteSeq(guid2[2]);
recvData.ReadByteSeq(guid2[3]);
recvData.ReadByteSeq(guid2[1]);
recvData.ReadByteSeq(guid2[5]);
recvData.ReadByteSeq(guid2[4]);
recvData.ReadByteSeq(guid1[7]);
recvData.ReadByteSeq(guid2[0]);
recvData.ReadByteSeq(guid1[2]);
recvData.ReadByteSeq(guid1[0]);
recvData.ReadByteSeq(guid1[6]);
recvData.ReadByteSeq(guid2[7]);
recvData.ReadByteSeq(guid1[1]);
recvData.ReadByteSeq(guid1[4]);
recvData.ReadByteSeq(guid1[3]);
recvData.ReadByteSeq(guid1[5]);
recvData.ReadByteSeq(guid2[6]);
petitionGuid = guid1;
playerGuid = guid2;
player = ObjectAccessor::FindPlayer(playerGuid);
if (!player)
return;
type = GUILD_CHARTER_TYPE;
uint32 petitionGuidLow = GUID_LOPART(petitionGuid);
sLog->outDebug(LOG_FILTER_NETWORKIO, "OFFER PETITION: type %u, GUID1 %u, to player id: %u", type, petitionGuidLow, GUID_LOPART(playerGuid));
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != player->GetTeam())
{
if (type == GUILD_CHARTER_TYPE)
Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED);
return;
}
if (type == GUILD_CHARTER_TYPE)
{
if (player->GetGuildIdInvited())
{
SendPetitionSignResult(_player->GetGUID(), MAKE_NEW_GUID(petitionGuidLow, 0, HIGHGUID_ITEM), PETITION_SIGN_ALREADY_SIGNED_OTHER);
return;
}
if (player->GetGuildId())
{
SendPetitionSignResult(_player->GetGUID(), MAKE_NEW_GUID(petitionGuidLow, 0, HIGHGUID_ITEM), PETITION_SIGN_ALREADY_IN_GUILD);
return;
}
}
auto stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
stmt->setUInt32(0, petitionGuidLow);
auto result = CharacterDatabase.Query(stmt);
typedef std::vector<uint32> storage;
storage loParts;
// result == NULL also correct charter without signs
if (result)
{
loParts.reserve(uint32(result->GetRowCount()));
do
{
auto fields = result->Fetch();
auto loPart = fields[0].GetUInt32();
if (GUID_LOPART(playerGuid) == loPart)
//.........这里部分代码省略.........
示例2: HandleVoidStorageQuery
void WorldSession::HandleVoidStorageQuery(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_VOID_STORAGE_QUERY");
Player* player = GetPlayer();
ObjectGuid npcGuid;
npcGuid[4] = recvData.ReadBit();
npcGuid[0] = recvData.ReadBit();
npcGuid[5] = recvData.ReadBit();
npcGuid[7] = recvData.ReadBit();
npcGuid[6] = recvData.ReadBit();
npcGuid[3] = recvData.ReadBit();
npcGuid[1] = recvData.ReadBit();
npcGuid[2] = recvData.ReadBit();
recvData.ReadByteSeq(npcGuid[5]);
recvData.ReadByteSeq(npcGuid[6]);
recvData.ReadByteSeq(npcGuid[3]);
recvData.ReadByteSeq(npcGuid[7]);
recvData.ReadByteSeq(npcGuid[1]);
recvData.ReadByteSeq(npcGuid[0]);
recvData.ReadByteSeq(npcGuid[4]);
recvData.ReadByteSeq(npcGuid[2]);
Creature* unit = player->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_VAULTKEEPER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - Unit (GUID: %u) not found or player can't interact with it.", GUID_LOPART(npcGuid));
return;
}
if (!player->IsVoidStorageUnlocked())
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - Player (GUID: %u, name: %s) queried void storage without unlocking it.", player->GetGUIDLow(), player->GetName().c_str());
return;
}
uint8 count = 0;
for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
if (player->GetVoidStorageItem(i))
++count;
WorldPacket data(SMSG_VOID_STORAGE_CONTENTS, 2 * count + (14 + 4 + 4 + 4 + 4) * count);
data.WriteBits(count, 8);
ByteBuffer itemData((14 + 4 + 4 + 4 + 4) * count);
for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
{
VoidStorageItem* item = player->GetVoidStorageItem(i);
if (!item)
continue;
ObjectGuid itemId = item->ItemId;
ObjectGuid creatorGuid = item->CreatorGuid;
data.WriteBit(creatorGuid[3]);
data.WriteBit(itemId[5]);
data.WriteBit(creatorGuid[6]);
data.WriteBit(creatorGuid[1]);
data.WriteBit(itemId[1]);
data.WriteBit(itemId[3]);
data.WriteBit(itemId[6]);
data.WriteBit(creatorGuid[5]);
data.WriteBit(creatorGuid[2]);
data.WriteBit(itemId[2]);
data.WriteBit(creatorGuid[4]);
data.WriteBit(itemId[0]);
data.WriteBit(itemId[4]);
data.WriteBit(itemId[7]);
data.WriteBit(creatorGuid[0]);
data.WriteBit(creatorGuid[7]);
itemData.WriteByteSeq(creatorGuid[3]);
itemData << uint32(item->ItemSuffixFactor);
itemData.WriteByteSeq(creatorGuid[4]);
itemData << uint32(i);
itemData.WriteByteSeq(itemId[0]);
itemData.WriteByteSeq(itemId[6]);
itemData.WriteByteSeq(creatorGuid[0]);
itemData.WriteByteSeq(creatorGuid[1]);
itemData << uint32(item->ItemRandomPropertyId);
itemData.WriteByteSeq(itemId[4]);
itemData.WriteByteSeq(itemId[5]);
itemData.WriteByteSeq(itemId[2]);
itemData.WriteByteSeq(creatorGuid[2]);
itemData.WriteByteSeq(creatorGuid[6]);
itemData.WriteByteSeq(itemId[1]);
itemData.WriteByteSeq(itemId[3]);
itemData.WriteByteSeq(creatorGuid[5]);
itemData.WriteByteSeq(creatorGuid[7]);
itemData << uint32(item->ItemEntry);
//.........这里部分代码省略.........
示例3: HandleTrainerBuySpellOpcode
void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
{
ObjectGuid guid;
uint32 spellId;
uint32 trainerId;
recvData >> spellId >> trainerId;
guid[1] = recvData.ReadBit();
guid[4] = recvData.ReadBit();
guid[0] = recvData.ReadBit();
guid[6] = recvData.ReadBit();
guid[3] = recvData.ReadBit();
guid[2] = recvData.ReadBit();
guid[5] = recvData.ReadBit();
guid[7] = recvData.ReadBit();
recvData.ReadByteSeq(guid[3]);
recvData.ReadByteSeq(guid[1]);
recvData.ReadByteSeq(guid[4]);
recvData.ReadByteSeq(guid[7]);
recvData.ReadByteSeq(guid[0]);
recvData.ReadByteSeq(guid[5]);
recvData.ReadByteSeq(guid[6]);
recvData.ReadByteSeq(guid[2]);
TC_LOG_DEBUG("network", "WORLD: Received CMSG_TRAINER_BUY_SPELL NpcGUID=%u, learn spell id is: %u", uint32(GUID_LOPART(guid)), spellId);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_TRAINER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleTrainerBuySpellOpcode - Unit (GUID: %u) not found or you can not interact with him.", uint32(GUID_LOPART(guid)));
return;
}
// remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
// check present spell in trainer spell list
TrainerSpellData const* trainer_spells = unit->GetTrainerSpells();
if (!trainer_spells)
{
SendTrainerBuyFailed(guid, spellId, 0);
return;
}
// not found, cheat?
TrainerSpell const* trainer_spell = trainer_spells->Find(spellId);
if (!trainer_spell)
{
SendTrainerBuyFailed(guid, spellId, 0);
return;
}
// can't be learn, cheat? Or double learn with lags...
//if (_player->GetTrainerSpellState(trainer_spell) != TRAINER_SPELL_GREEN)
// SendTrainerBuyFailed(guid, spellId, 0);
// return;
//}
// apply reputation discount
uint32 nSpellCost = uint32(floor(trainer_spell->spellCost * _player->GetReputationPriceDiscount(unit)));
// check money requirement
if (!_player->HasEnoughMoney(uint64(nSpellCost)))
{
SendTrainerBuyFailed(guid, spellId, 1);
return;
}
_player->ModifyMoney(-int64(nSpellCost));
unit->SendPlaySpellVisualKit(179, 0, 0); // 53 SpellCastDirected
_player->SendPlaySpellVisualKit(362, 1, 0); // 113 EmoteSalute
// learn explicitly or cast explicitly
if (trainer_spell->IsCastable())
_player->CastSpell(_player, trainer_spell->spell, true);
else
_player->learnSpell(spellId, false);
}
示例4: HandleGroupSetRolesOpcode
void WorldSession::HandleGroupSetRolesOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_ROLES");
uint32 newRole = 0;
ObjectGuid targetGuid;
recvData.read_skip<uint8>();
recvData >> newRole;
targetGuid[2] = recvData.ReadBit();
targetGuid[0] = recvData.ReadBit();
targetGuid[7] = recvData.ReadBit();
targetGuid[4] = recvData.ReadBit();
targetGuid[1] = recvData.ReadBit();
targetGuid[3] = recvData.ReadBit();
targetGuid[6] = recvData.ReadBit();
targetGuid[5] = recvData.ReadBit();
recvData.ReadByteSeq(targetGuid[1]);
recvData.ReadByteSeq(targetGuid[5]);
recvData.ReadByteSeq(targetGuid[2]);
recvData.ReadByteSeq(targetGuid[6]);
recvData.ReadByteSeq(targetGuid[7]);
recvData.ReadByteSeq(targetGuid[0]);
recvData.ReadByteSeq(targetGuid[4]);
recvData.ReadByteSeq(targetGuid[3]);
Player* tPlayer = ObjectAccessor::FindPlayer(targetGuid);
Group* group = GetPlayer()->GetGroup();
if (!tPlayer || !group)
return;
if (group != tPlayer->GetGroup())
return;
ObjectGuid assignerGuid = GetPlayer()->GetGUID();
WorldPacket data(SMSG_ROLE_CHANGED_INFORM, 1 + 8 + 1 + 8 + 4 + 1 + 4);
data.WriteBit(assignerGuid[1]);
data.WriteBit(targetGuid[7]);
data.WriteBit(targetGuid[6]);
data.WriteBit(targetGuid[4]);
data.WriteBit(targetGuid[1]);
data.WriteBit(targetGuid[0]);
data.WriteBit(assignerGuid[0]);
data.WriteBit(assignerGuid[7]);
data.WriteBit(targetGuid[3]);
data.WriteBit(assignerGuid[6]);
data.WriteBit(targetGuid[2]);
data.WriteBit(assignerGuid[4]);
data.WriteBit(assignerGuid[5]);
data.WriteBit(assignerGuid[2]);
data.WriteBit(targetGuid[5]);
data.WriteBit(assignerGuid[3]);
data.WriteByteSeq(assignerGuid[1]);
data.WriteByteSeq(assignerGuid[6]);
data.WriteByteSeq(assignerGuid[2]);
data.WriteByteSeq(targetGuid[3]);
data << uint32(group->GetMemberRole(targetGuid));
data.WriteByteSeq(assignerGuid[7]);
data.WriteByteSeq(targetGuid[5]);
data.WriteByteSeq(assignerGuid[3]);
data.WriteByteSeq(targetGuid[4]);
data.WriteByteSeq(targetGuid[7]);
data.WriteByteSeq(assignerGuid[5]);
data.WriteByteSeq(targetGuid[6]);
data.WriteByteSeq(targetGuid[2]);
data.WriteByteSeq(targetGuid[1]);
data.WriteByteSeq(targetGuid[0]);
data.WriteByteSeq(assignerGuid[4]);
data << uint8(0); // unknown
data.WriteByteSeq(assignerGuid[0]);
data << uint32(newRole);
if (group)
{
group->setGroupMemberRole(targetGuid, newRole);
group->SendUpdate();
group->BroadcastPacket(&data, false);
}
else
SendPacket(&data);
}
示例5: HandleVoidStorageTransfer
void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_VOID_STORAGE_TRANSFER");
Player* player = GetPlayer();
// Read everything
ObjectGuid npcGuid;
npcGuid[1] = recvData.ReadBit();
uint32 countDeposit = recvData.ReadBits(26);
if (countDeposit > 9)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - Player (GUID: %u, name: %s) wants to deposit more than 9 items (%u).", player->GetGUIDLow(), player->GetName().c_str(), countDeposit);
return;
}
std::vector<ObjectGuid> itemGuids(countDeposit);
for (uint32 i = 0; i < countDeposit; ++i)
{
itemGuids[i][4] = recvData.ReadBit();
itemGuids[i][6] = recvData.ReadBit();
itemGuids[i][7] = recvData.ReadBit();
itemGuids[i][0] = recvData.ReadBit();
itemGuids[i][1] = recvData.ReadBit();
itemGuids[i][5] = recvData.ReadBit();
itemGuids[i][3] = recvData.ReadBit();
itemGuids[i][2] = recvData.ReadBit();
}
npcGuid[2] = recvData.ReadBit();
npcGuid[0] = recvData.ReadBit();
npcGuid[3] = recvData.ReadBit();
npcGuid[5] = recvData.ReadBit();
npcGuid[6] = recvData.ReadBit();
npcGuid[4] = recvData.ReadBit();
uint32 countWithdraw = recvData.ReadBits(26);
if (countWithdraw > 9)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - Player (GUID: %u, name: %s) wants to withdraw more than 9 items (%u).", player->GetGUIDLow(), player->GetName().c_str(), countWithdraw);
return;
}
std::vector<ObjectGuid> itemIds(countWithdraw);
for (uint32 i = 0; i < countWithdraw; ++i)
{
itemIds[i][4] = recvData.ReadBit();
itemIds[i][7] = recvData.ReadBit();
itemIds[i][1] = recvData.ReadBit();
itemIds[i][0] = recvData.ReadBit();
itemIds[i][2] = recvData.ReadBit();
itemIds[i][3] = recvData.ReadBit();
itemIds[i][5] = recvData.ReadBit();
itemIds[i][6] = recvData.ReadBit();
}
npcGuid[7] = recvData.ReadBit();
for (uint32 i = 0; i < countDeposit; ++i)
{
recvData.ReadByteSeq(itemGuids[i][6]);
recvData.ReadByteSeq(itemGuids[i][1]);
recvData.ReadByteSeq(itemGuids[i][0]);
recvData.ReadByteSeq(itemGuids[i][2]);
recvData.ReadByteSeq(itemGuids[i][4]);
recvData.ReadByteSeq(itemGuids[i][5]);
recvData.ReadByteSeq(itemGuids[i][3]);
recvData.ReadByteSeq(itemGuids[i][7]);
}
recvData.ReadByteSeq(npcGuid[5]);
recvData.ReadByteSeq(npcGuid[6]);
for (uint32 i = 0; i < countWithdraw; ++i)
{
recvData.ReadByteSeq(itemIds[i][3]);
recvData.ReadByteSeq(itemIds[i][0]);
recvData.ReadByteSeq(itemIds[i][1]);
recvData.ReadByteSeq(itemIds[i][6]);
recvData.ReadByteSeq(itemIds[i][2]);
recvData.ReadByteSeq(itemIds[i][7]);
recvData.ReadByteSeq(itemIds[i][5]);
recvData.ReadByteSeq(itemIds[i][4]);
}
recvData.ReadByteSeq(npcGuid[1]);
recvData.ReadByteSeq(npcGuid[4]);
recvData.ReadByteSeq(npcGuid[7]);
recvData.ReadByteSeq(npcGuid[3]);
recvData.ReadByteSeq(npcGuid[2]);
recvData.ReadByteSeq(npcGuid[0]);
Creature* unit = player->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_VAULTKEEPER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - Unit (GUID: %u) not found or player can't interact with it.", GUID_LOPART(npcGuid));
return;
//.........这里部分代码省略.........
示例6: HandleGrantLevel
void WorldSession::HandleGrantLevel(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: CMSG_GRANT_LEVEL");
ObjectGuid guid;
guid[2] = recvData.ReadBit(); // 18
guid[1] = recvData.ReadBit(); // 17
guid[5] = recvData.ReadBit(); // 21
guid[3] = recvData.ReadBit(); // 19
guid[7] = recvData.ReadBit(); // 23
guid[4] = recvData.ReadBit(); // 20
guid[0] = recvData.ReadBit(); // 16
guid[6] = recvData.ReadBit(); // 22
recvData.ReadByteSeq(guid[1]); // 17
recvData.ReadByteSeq(guid[4]); // 20
recvData.ReadByteSeq(guid[2]); // 18
recvData.ReadByteSeq(guid[7]); // 23
recvData.ReadByteSeq(guid[5]); // 21
recvData.ReadByteSeq(guid[3]); // 19
recvData.ReadByteSeq(guid[6]); // 22
recvData.ReadByteSeq(guid[0]); // 16
Player* target = ObjectAccessor::GetObjectInWorld(guid, _player);
// check cheating
uint8 levels = _player->GetGrantableLevels();
uint8 error = 0;
if (!target)
error = ERR_REFER_A_FRIEND_NO_TARGET;
else if (levels == 0)
error = ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS;
else if (GetRecruiterId() != target->GetSession()->GetAccountId())
error = ERR_REFER_A_FRIEND_NOT_REFERRED_BY;
else if (target->GetTeamId() != _player->GetTeamId())
error = ERR_REFER_A_FRIEND_DIFFERENT_FACTION;
else if (target->getLevel() >= _player->getLevel())
error = ERR_REFER_A_FRIEND_TARGET_TOO_HIGH;
else if (target->getLevel() >= sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL))
error = ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I;
else if (target->GetGroup() != _player->GetGroup())
error = ERR_REFER_A_FRIEND_NOT_IN_GROUP;
if (error)
{
WorldPacket data(SMSG_REFER_A_FRIEND_FAILURE, 24);
data << uint32(error);
if (error == ERR_REFER_A_FRIEND_NOT_IN_GROUP)
data << target->GetName();
SendPacket(&data);
return;
}
ObjectGuid oGUID = _player->GetGUID();
WorldPacket data2(SMSG_PROPOSE_LEVEL_GRANT, 8);
data2.WriteBit(oGUID[6]); // 22
data2.WriteBit(oGUID[7]); // 23
data2.WriteBit(oGUID[2]); // 18
data2.WriteBit(oGUID[5]); // 21
data2.WriteBit(oGUID[3]); // 19
data2.WriteBit(oGUID[0]); // 16
data2.WriteBit(oGUID[1]); // 17
data2.WriteBit(oGUID[4]); // 20
data2.WriteByteSeq(oGUID[2]); // 18
data2.WriteByteSeq(oGUID[5]); // 21
data2.WriteByteSeq(oGUID[6]); // 22
data2.WriteByteSeq(oGUID[7]); // 23
data2.WriteByteSeq(oGUID[1]); // 17
data2.WriteByteSeq(oGUID[4]); // 20
data2.WriteByteSeq(oGUID[3]); // 19
data2.WriteByteSeq(oGUID[0]); // 16
target->GetSession()->SendPacket(&data2);
}
示例7: HandleRaidConfirmReadyCheck
void WorldSession::HandleRaidConfirmReadyCheck(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_RAID_CONFIRM_READY_CHECK");
ObjectGuid guid; // currently unused
Group* group = GetPlayer()->GetGroup();
if (!group)
return;
recvData.read_skip<uint8>();
guid[2] = recvData.ReadBit();
guid[1] = recvData.ReadBit();
guid[0] = recvData.ReadBit();
guid[3] = recvData.ReadBit();
guid[6] = recvData.ReadBit();
bool status = recvData.ReadBit();
guid[7] = recvData.ReadBit();
guid[4] = recvData.ReadBit();
guid[5] = recvData.ReadBit();
recvData.ReadByteSeq(guid[1]);
recvData.ReadByteSeq(guid[0]);
recvData.ReadByteSeq(guid[3]);
recvData.ReadByteSeq(guid[2]);
recvData.ReadByteSeq(guid[4]);
recvData.ReadByteSeq(guid[5]);
recvData.ReadByteSeq(guid[7]);
recvData.ReadByteSeq(guid[6]);
ObjectGuid playerGuid = GetPlayer()->GetGUID();
ObjectGuid groupGuid = group->GetGUID();
group->SetReadyCheckCount(group->GetReadyCheckCount() + 1);
WorldPacket data(SMSG_RAID_READY_CHECK_CONFIRM, 1 + 1 + 8 + 1 + 8);
data.WriteBit(groupGuid[4]);
data.WriteBit(playerGuid[5]);
data.WriteBit(playerGuid[3]);
data.WriteBit(status);
data.WriteBit(groupGuid[2]);
data.WriteBit(playerGuid[6]);
data.WriteBit(groupGuid[3]);
data.WriteBit(playerGuid[0]);
data.WriteBit(playerGuid[1]);
data.WriteBit(groupGuid[1]);
data.WriteBit(groupGuid[5]);
data.WriteBit(playerGuid[7]);
data.WriteBit(playerGuid[4]);
data.WriteBit(groupGuid[6]);
data.WriteBit(playerGuid[2]);
data.WriteBit(groupGuid[0]);
data.WriteBit(groupGuid[7]);
data.FlushBits();
data.WriteByteSeq(playerGuid[4]);
data.WriteByteSeq(playerGuid[2]);
data.WriteByteSeq(playerGuid[1]);
data.WriteByteSeq(groupGuid[4]);
data.WriteByteSeq(groupGuid[2]);
data.WriteByteSeq(playerGuid[0]);
data.WriteByteSeq(groupGuid[5]);
data.WriteByteSeq(groupGuid[3]);
data.WriteByteSeq(playerGuid[7]);
data.WriteByteSeq(groupGuid[6]);
data.WriteByteSeq(groupGuid[1]);
data.WriteByteSeq(playerGuid[6]);
data.WriteByteSeq(playerGuid[3]);
data.WriteByteSeq(playerGuid[5]);
data.WriteByteSeq(groupGuid[0]);
data.WriteByteSeq(groupGuid[7]);
group->BroadcastPacket(&data, true);
// Send SMSG_RAID_READY_CHECK_COMPLETED
if (group->GetReadyCheckCount() >= group->GetMembersCount())
{
ObjectGuid grpGUID = group->GetGUID();
data.Initialize(SMSG_RAID_READY_CHECK_COMPLETED, 1 + 8 + 1);
uint8 bitOrder[8] = { 4, 2, 5, 7, 1, 0, 3, 6 };
data.WriteBitInOrder(grpGUID, bitOrder);
data.WriteByteSeq(grpGUID[6]);
data.WriteByteSeq(grpGUID[0]);
data.WriteByteSeq(grpGUID[3]);
data.WriteByteSeq(grpGUID[1]);
data.WriteByteSeq(grpGUID[5]);
data << uint8(1); // or 0
data.WriteByteSeq(grpGUID[7]);
data.WriteByteSeq(grpGUID[2]);
data.WriteByteSeq(grpGUID[4]);
group->BroadcastPacket(&data, true);
}
//.........这里部分代码省略.........
示例8: HandleSubmitComplainOpcode
//Todo Database Support
void WorldSession::HandleSubmitComplainOpcode(WorldPacket & recvData)
{
float posX, posY, posZ, posO;
uint32 mapID;
ObjectGuid guid;
guid[5] = recvData.ReadBit();
guid[0] = recvData.ReadBit();
guid[1] = recvData.ReadBit();
uint32 length = recvData.ReadBits(12);
guid[3] = recvData.ReadBit();
guid[2] = recvData.ReadBit();
guid[4] = recvData.ReadBit();
guid[7] = recvData.ReadBit();
//guid:4 options:0 length :0;posY:648.581055 ,posX:-8851.486328 ,posZ:96.454063 ,MAP:0 ,poso:2.151366 , unk:0 text: //SPAM
//guid:4 options:10 length :0;posY:648.581055 ,posX:-8851.486328 ,posZ:96.454063 ,MAP:0 ,poso:2.151366 , unk:0 text: //Ausdrucksweise
uint32 options = recvData.ReadBits(4); // ##
guid[6] = recvData.ReadBit();
recvData.ReadByteSeq(guid[3]);
recvData.ReadByteSeq(guid[5]);
recvData.ReadByteSeq(guid[1]);
recvData.ReadByteSeq(guid[2]);
recvData.ReadByteSeq(guid[6]);
recvData.ReadByteSeq(guid[0]);
std::string text = recvData.ReadString(length);
recvData.ReadByteSeq(guid[7]);
recvData.ReadByteSeq(guid[4]);
recvData >> posY;
recvData >> posZ;
recvData >> posX;
recvData >> mapID;
recvData >> posO;
recvData.ReadBit();
uint32 count = recvData.ReadBits(22);
uint32* strLength = new uint32[count];
// sLog->outInfo(LOG_FILTER_SERVER_LOADING,"CMSG_SUBMIT_COMPLAIN:: count:%u guid:%u option:%u length :%u;posY:%f ,posX:%f ,posZ:%f ,MAP:%u ,poso:%f text:%s",count,guid,options,length,posY,posX,posZ,mapID,posO,text.c_str());
switch(options)
{
case COMPLAIN_CHEATER:
case COMPLAIN_PLAYER_NAME:
case COMPLAIN_GUILD_NAME:
case COMPLAIN_ARENA_NAME:
break;
case COMPLAIN_SPAM:
case COMPLAIN_BAD_LANG:
for (uint32 i = 0; i < count; ++i)
strLength[i] = recvData.ReadBits(13);
for (uint32 i = 0; i < count; ++i)
{
sLog->outInfo(LOG_FILTER_SERVER_LOADING,"time : %u",recvData.ReadPackedTime());
sLog->outInfo(LOG_FILTER_SERVER_LOADING,"Text : %s",recvData.ReadString(strLength[i]).c_str());
}
break;
default:
sLog->outInfo(LOG_FILTER_SERVER_LOADING,"CMSG_SUBMIT_COMPLAIN::UNKNOW option:%u",options);
}
}
示例9: HandleRaidReadyCheckConfirmOpcode
void WorldSession::HandleRaidReadyCheckConfirmOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_RAID_READY_CHECK_CONFIRM");
ObjectGuid guid; // currently unused
Group* group = GetPlayer()->GetGroup();
if (!group)
return;
if (!group->ReadyCheckInProgress())
return;
recvData.read_skip<uint8>();
guid[2] = recvData.ReadBit();
guid[1] = recvData.ReadBit();
guid[0] = recvData.ReadBit();
guid[3] = recvData.ReadBit();
guid[6] = recvData.ReadBit();
bool status = recvData.ReadBit();
guid[7] = recvData.ReadBit();
guid[4] = recvData.ReadBit();
guid[5] = recvData.ReadBit();
recvData.ReadByteSeq(guid[1]);
recvData.ReadByteSeq(guid[0]);
recvData.ReadByteSeq(guid[3]);
recvData.ReadByteSeq(guid[2]);
recvData.ReadByteSeq(guid[4]);
recvData.ReadByteSeq(guid[5]);
recvData.ReadByteSeq(guid[7]);
recvData.ReadByteSeq(guid[6]);
ObjectGuid groupGuid = group->GetGUID();
ObjectGuid playerGuid = GetPlayer()->GetGUID();
WorldPacket data(SMSG_RAID_READY_CHECK_CONFIRM, 1 + 1 + 8 + 1 + 8);
data.WriteBit(groupGuid[4]);
data.WriteBit(playerGuid[5]);
data.WriteBit(playerGuid[3]);
data.WriteBit(status);
data.WriteBit(groupGuid[2]);
data.WriteBit(playerGuid[6]);
data.WriteBit(groupGuid[3]);
data.WriteBit(playerGuid[0]);
data.WriteBit(playerGuid[1]);
data.WriteBit(groupGuid[1]);
data.WriteBit(groupGuid[5]);
data.WriteBit(playerGuid[7]);
data.WriteBit(playerGuid[4]);
data.WriteBit(groupGuid[6]);
data.WriteBit(playerGuid[2]);
data.WriteBit(groupGuid[0]);
data.WriteBit(groupGuid[7]);
data.FlushBits();
data.WriteByteSeq(playerGuid[4]);
data.WriteByteSeq(playerGuid[2]);
data.WriteByteSeq(playerGuid[1]);
data.WriteByteSeq(groupGuid[4]);
data.WriteByteSeq(groupGuid[2]);
data.WriteByteSeq(playerGuid[0]);
data.WriteByteSeq(groupGuid[5]);
data.WriteByteSeq(groupGuid[3]);
data.WriteByteSeq(playerGuid[7]);
data.WriteByteSeq(groupGuid[6]);
data.WriteByteSeq(groupGuid[1]);
data.WriteByteSeq(playerGuid[6]);
data.WriteByteSeq(playerGuid[3]);
data.WriteByteSeq(playerGuid[5]);
data.WriteByteSeq(groupGuid[0]);
data.WriteByteSeq(groupGuid[7]);
group->BroadcastPacket(&data, false);
group->ReadyCheckMemberHasResponded(playerGuid);
if (group->ReadyCheckAllResponded())
{
Player* leader = ObjectAccessor::FindPlayer(group->GetLeaderGUID());
if (leader)
leader->SetReadyCheckTimer(0);
group->ReadyCheck(false);
group->ReadyCheckResetResponded();
group->SendReadyCheckCompleted();
}
}
示例10: HandleSendMail
void WorldSession::HandleSendMail(WorldPacket& recv_data)
{
CHECK_INWORLD_RETURN
MailMessage msg;
ObjectGuid mailbox;
uint32 unk1, unk2;
uint64 money, COD;
uint32 bodyLength, subjectLength, receiverLength;
std::string receiver, subject, body;
std::vector< Item* > items;
std::vector< Item* >::iterator itr;
Item* pItem;
recv_data >> unk1;
recv_data >> unk2;
recv_data >> COD;
recv_data >> money;
bodyLength = recv_data.readBits(12);
subjectLength = recv_data.readBits(9);
uint8 items_count = recv_data.readBits(5); // attached items count
if (items_count > MAIL_MAX_ITEM_SLOT)
{
SendMailError(MAIL_ERR_TOO_MANY_ATTACHMENTS);
return;
}
mailbox[0] = recv_data.readBit();
ObjectGuid itemGUIDs[MAIL_MAX_ITEM_SLOT];
for (uint8 i = 0; i < items_count; ++i)
{
itemGUIDs[i][2] = recv_data.readBit();
itemGUIDs[i][6] = recv_data.readBit();
itemGUIDs[i][3] = recv_data.readBit();
itemGUIDs[i][7] = recv_data.readBit();
itemGUIDs[i][1] = recv_data.readBit();
itemGUIDs[i][0] = recv_data.readBit();
itemGUIDs[i][4] = recv_data.readBit();
itemGUIDs[i][5] = recv_data.readBit();
}
mailbox[3] = recv_data.readBit();
mailbox[4] = recv_data.readBit();
receiverLength = recv_data.readBits(7);
mailbox[2] = recv_data.readBit();
mailbox[6] = recv_data.readBit();
mailbox[1] = recv_data.readBit();
mailbox[7] = recv_data.readBit();
mailbox[5] = recv_data.readBit();
recv_data.ReadByteSeq(mailbox[4]);
for (uint8 i = 0; i < items_count; ++i)
{
recv_data.ReadByteSeq(itemGUIDs[i][6]);
recv_data.ReadByteSeq(itemGUIDs[i][1]);
recv_data.ReadByteSeq(itemGUIDs[i][7]);
recv_data.ReadByteSeq(itemGUIDs[i][2]);
recv_data.read_skip<uint8>(); // item slot in mail, not used
recv_data.ReadByteSeq(itemGUIDs[i][3]);
recv_data.ReadByteSeq(itemGUIDs[i][0]);
recv_data.ReadByteSeq(itemGUIDs[i][4]);
recv_data.ReadByteSeq(itemGUIDs[i][5]);
}
recv_data.ReadByteSeq(mailbox[7]);
recv_data.ReadByteSeq(mailbox[3]);
recv_data.ReadByteSeq(mailbox[6]);
recv_data.ReadByteSeq(mailbox[5]);
subject = recv_data.ReadString(subjectLength);
receiver = recv_data.ReadString(receiverLength);
recv_data.ReadByteSeq(mailbox[2]);
recv_data.ReadByteSeq(mailbox[0]);
body = recv_data.ReadString(bodyLength);
recv_data.ReadByteSeq(mailbox[1]);
// packet read complete, now do check
// Search for the recipient
PlayerInfo* player = ObjectMgr::getSingleton().GetPlayerInfoByName(receiver.c_str());
if (player == NULL)
{
SendMailError(MAIL_ERR_RECIPIENT_NOT_FOUND);
return;
}
for (uint8 i = 0; i < items_count; ++i)
{
pItem = _player->GetItemInterface()->GetItemByGUID(itemGUIDs[i]);
//.........这里部分代码省略.........
示例11: HandleMoveTeleportAck
void WorldSession::HandleMoveTeleportAck(WorldPacket& recvPacket)
{
TC_LOG_DEBUG("network", "MSG_MOVE_TELEPORT_ACK");
ObjectGuid guid;
uint32 flags, time;
recvPacket >> flags >> time;
guid[5] = recvPacket.ReadBit();
guid[0] = recvPacket.ReadBit();
guid[1] = recvPacket.ReadBit();
guid[6] = recvPacket.ReadBit();
guid[3] = recvPacket.ReadBit();
guid[7] = recvPacket.ReadBit();
guid[2] = recvPacket.ReadBit();
guid[4] = recvPacket.ReadBit();
recvPacket.ReadByteSeq(guid[4]);
recvPacket.ReadByteSeq(guid[2]);
recvPacket.ReadByteSeq(guid[7]);
recvPacket.ReadByteSeq(guid[6]);
recvPacket.ReadByteSeq(guid[5]);
recvPacket.ReadByteSeq(guid[1]);
recvPacket.ReadByteSeq(guid[3]);
recvPacket.ReadByteSeq(guid[0]);
TC_LOG_DEBUG("network", "Guid " UI64FMTD, uint64(guid));
TC_LOG_DEBUG("network", "Flags %u, time %u", flags, time/IN_MILLISECONDS);
Player* plMover = _player->m_mover->ToPlayer();
if (!plMover || !plMover->IsBeingTeleportedNear())
return;
if (guid != plMover->GetGUID())
return;
plMover->SetSemaphoreTeleportNear(false);
uint32 old_zone = plMover->GetZoneId();
WorldLocation const& dest = plMover->GetTeleportDest();
plMover->UpdatePosition(dest, true);
uint32 newzone, newarea;
plMover->GetZoneAndAreaId(newzone, newarea);
plMover->UpdateZone(newzone, newarea);
// new zone
if (old_zone != newzone)
{
// honorless target
if (plMover->pvpInfo.IsHostile)
plMover->CastSpell(plMover, 2479, true);
// in friendly area
else if (plMover->IsPvP() && !plMover->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
plMover->UpdatePvP(false, false);
}
// resummon pet
GetPlayer()->ResummonPetTemporaryUnSummonedIfAny();
//lets process all delayed operations on successful teleport
GetPlayer()->ProcessDelayedOperations();
}
示例12: HandleGroupInviteOpcode
void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_INVITE");
ObjectGuid crossRealmGuid; // unused
recvData.read_skip<uint32>(); // Non-zero in cross realm invites
recvData.read_skip<uint32>(); // Always 0
crossRealmGuid[2] = recvData.ReadBit();
crossRealmGuid[7] = recvData.ReadBit();
uint8 realmLen = recvData.ReadBits(9);
crossRealmGuid[3] = recvData.ReadBit();
uint8 nameLen = recvData.ReadBits(10);
crossRealmGuid[5] = recvData.ReadBit();
crossRealmGuid[4] = recvData.ReadBit();
crossRealmGuid[6] = recvData.ReadBit();
crossRealmGuid[0] = recvData.ReadBit();
crossRealmGuid[1] = recvData.ReadBit();
recvData.ReadByteSeq(crossRealmGuid[4]);
recvData.ReadByteSeq(crossRealmGuid[7]);
recvData.ReadByteSeq(crossRealmGuid[6]);
std::string memberName, realmName;
memberName = recvData.ReadString(nameLen);
realmName = recvData.ReadString(realmLen); // unused
recvData.ReadByteSeq(crossRealmGuid[1]);
recvData.ReadByteSeq(crossRealmGuid[0]);
recvData.ReadByteSeq(crossRealmGuid[5]);
recvData.ReadByteSeq(crossRealmGuid[3]);
recvData.ReadByteSeq(crossRealmGuid[2]);
// attempt add selected player
// cheating
if (!normalizePlayerName(memberName))
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S);
return;
}
Player* player = ObjectAccessor::FindPlayerByName(memberName);
// no player
if (!player)
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S);
return;
}
// restrict invite to GMs
if (!sWorld->getBoolConfig(CONFIG_ALLOW_GM_GROUP) && !GetPlayer()->IsGameMaster() && player->IsGameMaster())
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_BAD_PLAYER_NAME_S);
return;
}
// can't group with
if (!GetPlayer()->IsGameMaster() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && GetPlayer()->GetTeam() != player->GetTeam())
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_PLAYER_WRONG_FACTION);
return;
}
if (GetPlayer()->GetInstanceId() != 0 && player->GetInstanceId() != 0 && GetPlayer()->GetInstanceId() != player->GetInstanceId() && GetPlayer()->GetMapId() == player->GetMapId())
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_TARGET_NOT_IN_INSTANCE_S);
return;
}
// just ignore us
if (player->GetInstanceId() != 0 && player->GetDungeonDifficulty() != GetPlayer()->GetDungeonDifficulty())
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_IGNORING_YOU_S);
return;
}
if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow()))
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_IGNORING_YOU_S);
return;
}
ObjectGuid invitedGuid = player->GetGUID();
Group* group = GetPlayer()->GetGroup();
if (group && group->isBGGroup())
group = GetPlayer()->GetOriginalGroup();
Group* group2 = player->GetGroup();
if (group2 && group2->isBGGroup())
group2 = player->GetOriginalGroup();
// player already in another group or invited
if (group2 || player->GetGroupInvite())
{
SendPartyResult(PARTY_OP_INVITE, memberName, ERR_ALREADY_IN_GROUP_S);
//.........这里部分代码省略.........
示例13: HandleGroupSetRolesOpcode
void WorldSession::HandleGroupSetRolesOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_SET_ROLES");
uint32 newRole;
ObjectGuid guid1; // Assigner GUID
ObjectGuid guid2; // Target GUID
guid1 = GetPlayer()->GetGUID();
recvData >> newRole;
guid2[2] = recvData.ReadBit();
guid2[6] = recvData.ReadBit();
guid2[3] = recvData.ReadBit();
guid2[7] = recvData.ReadBit();
guid2[5] = recvData.ReadBit();
guid2[1] = recvData.ReadBit();
guid2[0] = recvData.ReadBit();
guid2[4] = recvData.ReadBit();
recvData.ReadByteSeq(guid2[6]);
recvData.ReadByteSeq(guid2[4]);
recvData.ReadByteSeq(guid2[1]);
recvData.ReadByteSeq(guid2[3]);
recvData.ReadByteSeq(guid2[0]);
recvData.ReadByteSeq(guid2[5]);
recvData.ReadByteSeq(guid2[2]);
recvData.ReadByteSeq(guid2[7]);
WorldPacket data(SMSG_GROUP_SET_ROLE, 24);
data.WriteBit(guid1[1]);
data.WriteBit(guid2[0]);
data.WriteBit(guid2[2]);
data.WriteBit(guid2[4]);
data.WriteBit(guid2[7]);
data.WriteBit(guid2[3]);
data.WriteBit(guid1[7]);
data.WriteBit(guid2[5]);
data.WriteBit(guid1[5]);
data.WriteBit(guid1[4]);
data.WriteBit(guid1[3]);
data.WriteBit(guid2[6]);
data.WriteBit(guid1[2]);
data.WriteBit(guid1[6]);
data.WriteBit(guid2[1]);
data.WriteBit(guid1[0]);
data.WriteByteSeq(guid1[7]);
data.WriteByteSeq(guid2[3]);
data.WriteByteSeq(guid1[6]);
data.WriteByteSeq(guid2[4]);
data.WriteByteSeq(guid2[0]);
data << uint32(newRole); // New Role
data.WriteByteSeq(guid2[6]);
data.WriteByteSeq(guid2[2]);
data.WriteByteSeq(guid1[0]);
data.WriteByteSeq(guid1[4]);
data.WriteByteSeq(guid2[1]);
data.WriteByteSeq(guid1[3]);
data.WriteByteSeq(guid1[5]);
data.WriteByteSeq(guid1[2]);
data.WriteByteSeq(guid2[5]);
data.WriteByteSeq(guid2[7]);
data.WriteByteSeq(guid1[1]);
data << uint32(0); // Old Role
if (Group* group = GetPlayer()->GetGroup())
{
/// @todo probably should be sent only if (oldRole != newRole)
group->BroadcastPacket(&data, false);
group->SetLfgRoles(guid2, newRole);
}
else
SendPacket(&data);
}
示例14: HandleGroupSetRolesOpcode
void WorldSession::HandleGroupSetRolesOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_ROLES");
uint32 newRole;
ObjectGuid guid1; // Assigner GUID
ObjectGuid guid2; // Target GUID
guid1 = GetPlayer()->GetGUID();
recvData >> newRole;
guid2[2] = recvData.ReadBit();
guid2[6] = recvData.ReadBit();
guid2[3] = recvData.ReadBit();
guid2[7] = recvData.ReadBit();
guid2[5] = recvData.ReadBit();
guid2[1] = recvData.ReadBit();
guid2[0] = recvData.ReadBit();
guid2[4] = recvData.ReadBit();
recvData.ReadByteSeq(guid2[6]);
recvData.ReadByteSeq(guid2[4]);
recvData.ReadByteSeq(guid2[1]);
recvData.ReadByteSeq(guid2[3]);
recvData.ReadByteSeq(guid2[0]);
recvData.ReadByteSeq(guid2[5]);
recvData.ReadByteSeq(guid2[2]);
recvData.ReadByteSeq(guid2[7]);
WorldPacket data(SMSG_GROUP_SET_ROLE, 24);
data.WriteBit(guid1[1]);
data.WriteBit(guid2[0]);
data.WriteBit(guid2[2]);
data.WriteBit(guid2[4]);
data.WriteBit(guid2[7]);
data.WriteBit(guid2[3]);
data.WriteBit(guid1[7]);
data.WriteBit(guid2[5]);
data.WriteBit(guid1[5]);
data.WriteBit(guid1[4]);
data.WriteBit(guid1[3]);
data.WriteBit(guid2[6]);
data.WriteBit(guid1[2]);
data.WriteBit(guid1[6]);
data.WriteBit(guid2[1]);
data.WriteBit(guid1[0]);
data.WriteByteSeq(guid1[7]);
data.WriteByteSeq(guid2[3]);
data.WriteByteSeq(guid1[6]);
data.WriteByteSeq(guid2[4]);
data.WriteByteSeq(guid2[0]);
data << uint32(newRole); // New Role
data.WriteByteSeq(guid2[6]);
data.WriteByteSeq(guid2[2]);
data.WriteByteSeq(guid1[0]);
data.WriteByteSeq(guid1[4]);
data.WriteByteSeq(guid2[1]);
data.WriteByteSeq(guid1[3]);
data.WriteByteSeq(guid1[5]);
data.WriteByteSeq(guid1[2]);
data.WriteByteSeq(guid2[5]);
data.WriteByteSeq(guid2[7]);
data.WriteByteSeq(guid1[1]);
data << uint32(0); // Old Role
if (GetPlayer()->GetGroup())
GetPlayer()->GetGroup()->BroadcastPacket(&data, false);
else
SendPacket(&data);
}
示例15: HandleBattleFieldPortOpcode
void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_BATTLEFIELD_PORT Message");
uint32 time;
uint32 queueSlot;
uint32 unk;
uint8 action; // enter battle 0x1, leave queue 0x0
ObjectGuid guid;
recvData >> time;
recvData >> queueSlot;
recvData >> unk;
guid[0] = recvData.ReadBit();
guid[1] = recvData.ReadBit();
guid[5] = recvData.ReadBit();
guid[6] = recvData.ReadBit();
guid[7] = recvData.ReadBit();
guid[4] = recvData.ReadBit();
guid[3] = recvData.ReadBit();
guid[2] = recvData.ReadBit();
action = recvData.ReadBit();
recvData.ReadByteSeq(guid[1]);
recvData.ReadByteSeq(guid[3]);
recvData.ReadByteSeq(guid[5]);
recvData.ReadByteSeq(guid[7]);
recvData.ReadByteSeq(guid[0]);
recvData.ReadByteSeq(guid[2]);
recvData.ReadByteSeq(guid[6]);
recvData.ReadByteSeq(guid[4]);
if (!_player->InBattlegroundQueue())
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player not in queue!",
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
return;
}
BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(queueSlot);
if (bgQueueTypeId == BATTLEGROUND_QUEUE_NONE)
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Invalid queueSlot!",
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
return;
}
BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId);
//we must use temporary variable, because GroupQueueInfo pointer can be deleted in BattlegroundQueue::RemovePlayer() function
GroupQueueInfo ginfo;
if (!bgQueue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo))
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player not in queue (No player Group Info)!",
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
return;
}
// if action == 1, then instanceId is required
if (!ginfo.IsInvitedToBGInstanceGUID && action == 1)
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Player is not invited to any bg!",
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
return;
}
BattlegroundTypeId bgTypeId = BattlegroundMgr::BGTemplateId(bgQueueTypeId);
// BGTemplateId returns BATTLEGROUND_AA when it is arena queue.
// Do instance id search as there is no AA bg instances.
Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID, bgTypeId == BATTLEGROUND_AA ? BATTLEGROUND_TYPE_NONE : bgTypeId);
if (!bg)
{
if (action)
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u. Cant find BG with id %u!",
GetPlayerInfo().c_str(), queueSlot, unk, time, action, ginfo.IsInvitedToBGInstanceGUID);
return;
}
bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId);
if (!bg)
{
sLog->outError(LOG_FILTER_NETWORKIO, "BattlegroundHandler: bg_template not found for type id %u.", bgTypeId);
return;
}
}
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "CMSG_BATTLEFIELD_PORT %s Slot: %u, Unk: %u, Time: %u, Action: %u.",
GetPlayerInfo().c_str(), queueSlot, unk, time, action);
// get real bg type
bgTypeId = bg->GetTypeID();
// expected bracket entry
PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel());
if (!bracketEntry)
return;
//some checks if player isn't cheating - it is not exactly cheating, but we cannot allow it
//.........这里部分代码省略.........