本文整理汇总了C++中WorldPacket::ReadGuidMask方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldPacket::ReadGuidMask方法的具体用法?C++ WorldPacket::ReadGuidMask怎么用?C++ WorldPacket::ReadGuidMask使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldPacket
的用法示例。
在下文中一共展示了WorldPacket::ReadGuidMask方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleMailMarkAsRead
//called when mail is read
void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData)
{
ObjectGuid mailbox;
uint32 mailId;
recvData >> mailId;
recvData.ReadGuidMask(mailbox, 0, 2, 3);
recvData.ReadBit();
recvData.ReadGuidMask(mailbox, 4, 6, 7, 1, 5);
recvData.FlushBits();
recvData.ReadGuidBytes(mailbox, 1, 7, 2, 5, 6, 3, 4, 0);
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
if (Mail* mail = _player->GetMail(mailId))
{
if (_player->unReadMails)
--_player->unReadMails;
mail->checked |= MAIL_CHECK_MASK_READ;
mail->state = MAIL_STATE_CHANGED;
_player->m_mailsUpdated = true;
}
}
示例2: HandleLfgProposalResultOpcode
void WorldSession::HandleLfgProposalResultOpcode(WorldPacket& recvData)
{
uint32 proposalID; // Proposal ID
bool accept;
ObjectGuid guid1;
ObjectGuid guid2;
recvData >> proposalID;
recvData.read_skip<uint32>();
recvData.read_skip<uint32>();
recvData.read_skip<uint32>();
recvData.ReadGuidMask(guid2, 4, 5, 0, 6, 2, 7, 1, 3);
recvData.ReadGuidBytes(guid2, 7, 4, 3, 2, 6, 0, 1, 5);
guid1[7] = recvData.ReadBit();
accept = recvData.ReadBit();
recvData.ReadGuidMask(guid1, 1, 3, 0, 5, 4, 6, 2);
recvData.ReadGuidBytes(guid1, 7, 1, 5, 6, 3, 4, 0, 2);
TC_LOG_DEBUG("lfg", "CMSG_LFG_PROPOSAL_RESULT %s proposal: %u accept: %u",
GetPlayerInfo().c_str(), proposalID, accept ? 1 : 0);
sLFGMgr->UpdateProposal(proposalID, GetPlayer()->GetGUID(), accept);
}
示例3: HandleRepairItemOpcode
void WorldSession::HandleRepairItemOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: CMSG_REPAIR_ITEM");
ObjectGuid npcGuid, itemGuid;
bool guildBank; // new in 2.3.2, bool that means from guild bank money
recvData.ReadGuidMask(itemGuid, 2, 5);
npcGuid[3] = recvData.ReadBit();
guildBank = recvData.ReadBit();
npcGuid[7] = recvData.ReadBit();
itemGuid[4] = recvData.ReadBit();
npcGuid[2] = recvData.ReadBit();
recvData.ReadGuidMask(itemGuid, 0, 3);
recvData.ReadGuidMask(npcGuid, 6, 1, 4);
itemGuid[6] = recvData.ReadBit();
recvData.ReadGuidMask(npcGuid, 5, 0);
recvData.ReadGuidMask(itemGuid, 7, 1);
recvData.ReadByteSeq(itemGuid[2]);
recvData.ReadByteSeq(npcGuid[1]);
recvData.ReadByteSeq(itemGuid[1]);
recvData.ReadGuidBytes(npcGuid, 4, 7, 3, 2);
recvData.ReadByteSeq(itemGuid[7]);
recvData.ReadGuidBytes(npcGuid, 5, 0);
recvData.ReadGuidBytes(itemGuid, 5, 3, 4, 6);
recvData.ReadByteSeq(npcGuid[6]);
recvData.ReadByteSeq(itemGuid[0]);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(npcGuid, UNIT_NPC_FLAG_REPAIR);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleRepairItemOpcode - Unit (GUID: %u) not found or you can not interact with him.", uint32(GUID_LOPART(npcGuid)));
return;
}
// remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
// reputation discount
float discountMod = _player->GetReputationPriceDiscount(unit);
if (itemGuid)
{
TC_LOG_DEBUG("network", "ITEM: Repair item, itemGUID = %u, npcGUID = %u", GUID_LOPART(itemGuid), GUID_LOPART(npcGuid));
Item* item = _player->GetItemByGuid(itemGuid);
if (item)
_player->DurabilityRepair(item->GetPos(), true, discountMod, guildBank);
}
else
{
TC_LOG_DEBUG("network", "ITEM: Repair all items, npcGUID = %u", GUID_LOPART(npcGuid));
_player->DurabilityRepairAll(true, discountMod, guildBank);
}
}
示例4: HandlePetitionDeclineOpcode
void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "Received opcode MSG_PETITION_DECLINE"); // ok
ObjectGuid petitionGuid;
uint64 ownerGuid;
recvData.ReadGuidMask(petitionGuid, 5, 6, 4, 3, 1, 7, 0, 2);
recvData.ReadGuidBytes(petitionGuid, 6, 2, 1, 5, 0, 7, 4, 3);
TC_LOG_DEBUG("network", "Petition %u declined by %u", GUID_LOPART(petitionGuid), _player->GetGUIDLow());
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID);
stmt->setUInt32(0, GUID_LOPART(petitionGuid));
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
return;
Field* fields = result->Fetch();
ownerGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
Player* owner = ObjectAccessor::FindPlayer(ownerGuid);
if (owner) // petition owner online
owner->GetSession()->SendPetitionSignResults(petitionGuid, _player->GetGUID(), PETITION_SIGN_OK);
}
示例5: HandleMailReturnToSender
void WorldSession::HandleMailReturnToSender(WorldPacket& recvData)
{
ObjectGuid mailbox;
uint32 mailId;
recvData >> mailId;
recvData.ReadGuidMask(mailbox, 2, 0, 4, 6, 3, 1, 7, 5);
recvData.ReadGuidBytes(mailbox, 5, 6, 2, 0, 3, 1, 4, 7);
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
Player* player = _player;
Mail* m = player->GetMail(mailId);
if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
{
player->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_ERR_INTERNAL_ERROR);
return;
}
//we can return mail now, so firstly delete the old one
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_BY_ID);
stmt->setUInt32(0, mailId);
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM_BY_ID);
stmt->setUInt32(0, mailId);
trans->Append(stmt);
player->RemoveMail(mailId);
// only return mail if the player exists (and delete if not existing)
if (m->messageType == MAIL_NORMAL && m->sender)
{
MailDraft draft(m->subject, m->body);
if (m->mailTemplateId)
draft = MailDraft(m->mailTemplateId, false); // items already included
if (m->HasItems())
{
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
{
if (Item* const item = player->GetMItem(itr2->item_guid))
draft.AddItem(item);
player->RemoveMItem(itr2->item_guid);
}
}
draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender, trans);
}
CharacterDatabase.CommitTransaction(trans);
delete m; //we can deallocate old mail
player->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK);
}
示例6: HandleTrainerListOpcode
void WorldSession::HandleTrainerListOpcode(WorldPacket& recvData)
{
ObjectGuid guid;
recvData.ReadGuidMask(guid, 0, 2, 7, 6, 1, 4, 5, 3);
recvData.ReadGuidBytes(guid, 3, 6, 7, 5, 1, 0, 2, 4);
SendTrainerList(guid);
}
示例7: HandleGuildFinderDeclineRecruit
void WorldSession::HandleGuildFinderDeclineRecruit(WorldPacket& recvPacket)
{
SF_LOG_DEBUG("network", "WORLD: Received CMSG_LF_GUILD_DECLINE_RECRUIT");
ObjectGuid RecruitGUID;
recvPacket.ReadGuidMask(RecruitGUID, 6, 7, 3, 1, 2, 0, 4, 5);
recvPacket.ReadGuidBytes(RecruitGUID, 0, 7, 1, 6, 4, 3, 5, 2);
if (!IS_PLAYER_GUID(RecruitGUID))
return;
sGuildFinderMgr->RemoveMembershipRequest(GUID_LOPART(RecruitGUID), GetPlayer()->GetGuildId());
}
示例8: HandleGossipHelloOpcode
void WorldSession::HandleGossipHelloOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_GOSSIP_HELLO");
ObjectGuid guid;
recvData.ReadGuidMask(guid, 2, 4, 0, 3, 6, 7, 5, 1);
recvData.ReadGuidBytes(guid, 4, 7, 1, 0, 5, 3, 6, 2);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleGossipHelloOpcode - Unit (GUID: %u) not found or you can not interact with him.", uint32(GUID_LOPART(guid)));
return;
}
// set faction visible if needed
if (FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->getFaction()))
_player->GetReputationMgr().SetVisible(factionTemplateEntry);
GetPlayer()->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TALK);
// remove fake death
//if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
// GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
if (unit->IsArmorer() || unit->IsCivilian() || unit->IsQuestGiver() || unit->IsServiceProvider() || unit->IsGuard())
unit->StopMoving();
// If spiritguide, no need for gossip menu, just put player into resurrect queue
if (unit->IsSpiritGuide())
{
Battleground* bg = _player->GetBattleground();
if (bg)
{
bg->AddPlayerToResurrectQueue(unit->GetGUID(), _player->GetGUID());
sBattlegroundMgr->SendAreaSpiritHealerQueryOpcode(_player, bg, unit->GetGUID());
return;
}
}
if (!sScriptMgr->OnGossipHello(_player, unit))
{
// _player->TalkedToCreature(unit->GetEntry(), unit->GetGUID());
_player->PrepareGossipMenu(unit, unit->GetCreatureTemplate()->GossipMenuId, true);
_player->SendPreparedGossip(unit);
}
unit->AI()->sGossipHello(_player);
}
示例9: HandlePetitionQueryOpcode
void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_QUERY"); // ok
uint32 guildguid;
ObjectGuid petitionGuid;
recvData >> guildguid; // in Trinity always same as GUID_LOPART(petitionguid)
recvData.ReadGuidMask(petitionGuid, 2, 3, 1, 0, 4, 7, 6, 5);
recvData.ReadGuidBytes(petitionGuid, 0, 4, 7, 5, 1, 6, 3, 2);
TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY Petition GUID %u Guild GUID %u", GUID_LOPART(petitionGuid), guildguid);
SendPetitionQueryOpcode(petitionGuid);
}
示例10: HandleMailTakeMoney
void WorldSession::HandleMailTakeMoney(WorldPacket& recvData)
{
ObjectGuid mailbox;
uint64 money;
uint32 mailId;
recvData >> mailId;
recvData >> money;
recvData.ReadGuidMask(mailbox, 7, 6, 3, 2, 4, 5, 0, 1);
recvData.ReadGuidBytes(mailbox, 7, 1, 4, 0, 3, 2, 6, 5);
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
Player* player = _player;
Mail* m = player->GetMail(mailId);
if ((!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL)) ||
(money > 0 && m->money != money))
{
player->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_ERR_INTERNAL_ERROR);
return;
}
if (!player->ModifyMoney(m->money, false))
{
player->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_TOO_MUCH_GOLD);
return;
}
m->money = 0;
m->state = MAIL_STATE_CHANGED;
player->m_mailsUpdated = true;
player->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_OK);
// save money and mail to prevent cheating
SQLTransaction trans = CharacterDatabase.BeginTransaction();
player->SaveGoldToDB(trans);
player->_SaveMail(trans);
CharacterDatabase.CommitTransaction(trans);
}
示例11: HandlePetitionShowListOpcode
void WorldSession::HandlePetitionShowListOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "Received CMSG_PETITION_SHOWLIST");
ObjectGuid guid;
recvData.ReadGuidMask(guid, 1, 7, 2, 5, 4, 0, 3, 6);
recvData.ReadGuidBytes(guid, 6, 3, 2, 4, 1, 7, 5, 0);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_PETITIONER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandlePetitionerShowListOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)));
return;
}
SendPetitionShowList(guid);
}
示例12: HandleAttackSwingOpcode
void WorldSession::HandleAttackSwingOpcode(WorldPacket& recvData)
{
ObjectGuid guid;
recvData.ReadGuidMask(guid, 6, 5, 7, 0, 3, 1, 4, 2);
recvData.ReadGuidBytes(guid, 6, 7, 1, 3, 2, 0, 4, 5);
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_ATTACK_SWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));
Unit* pEnemy = ObjectAccessor::GetUnit(*_player, guid);
if (!pEnemy)
{
// stop attack state at client
SendAttackStop(NULL);
return;
}
if (!_player->IsValidAttackTarget(pEnemy))
{
// stop attack state at client
SendAttackStop(pEnemy);
return;
}
//! Client explicitly checks the following before sending CMSG_ATTACK_SWING packet,
//! so we'll place the same check here. Note that it might be possible to reuse this snippet
//! in other places as well.
if (Vehicle* vehicle = _player->GetVehicle())
{
VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(_player);
ASSERT(seat);
if (!(seat->m_flags & VEHICLE_SEAT_FLAG_CAN_ATTACK))
{
SendAttackStop(pEnemy);
return;
}
}
_player->Attack(pEnemy, true);
}
示例13: HandleEnterPlayerVehicle
void WorldSession::HandleEnterPlayerVehicle(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_PLAYER_VEHICLE_ENTER");
ObjectGuid guid;
recvData.ReadGuidMask(guid, 5, 7, 3, 0, 2, 4, 6, 1);
recvData.ReadGuidBytes(guid, 5, 3, 1, 2, 7, 0, 6, 4);
/*uint64 guid;
recvData >> guid;*/
//TODO: this does not work, the guid obtained is wrong
if (Player* player = ObjectAccessor::FindPlayer(guid))
{
if (!player->GetVehicleKit()){
return;
}
if (!player->IsInRaidWith(_player)){
return;
}
if (!player->IsWithinDistInMap(_player, INTERACTION_DISTANCE)){
return;
}
_player->EnterVehicle(player);
}
}
示例14: HandleSpiritHealerActivateOpcode
void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: CMSG_SPIRIT_HEALER_ACTIVATE");
ObjectGuid guid;
recvData.ReadGuidMask(guid, 2, 7, 6, 0, 5, 4, 1, 3);
recvData.ReadGuidBytes(guid, 1, 5, 6, 3, 2, 0, 7, 4);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_SPIRITHEALER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleSpiritHealerActivateOpcode - 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);
SendSpiritResurrect();
}
示例15: HandleListStabledPetsOpcode
void WorldSession::HandleListStabledPetsOpcode(WorldPacket& recvData)
{
TC_LOG_DEBUG("network", "WORLD: Recv MSG_LIST_STABLED_PETS");
ObjectGuid npcGUID;
recvData.ReadGuidMask(npcGUID, 0, 5, 1, 3, 6, 7, 2, 4);
recvData.ReadGuidBytes(npcGUID, 0, 5, 7, 1, 2, 3, 4, 6);
if (!CheckStableMaster(npcGUID))
return;
// remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
// remove mounts this fix bug where getting pet from stable while mounted deletes pet.
if (GetPlayer()->IsMounted())
GetPlayer()->RemoveAurasByType(SPELL_AURA_MOUNTED);
SendStablePetCallback(NULL, npcGUID);
}