Implement CMSG_DISMISS_CRITTER handler

This commit is contained in:
Yaki Khadafi 2015-02-03 05:32:27 +00:00 committed by Antz
parent c74a8b9520
commit 29bbdd40bf
4 changed files with 24 additions and 2 deletions

View file

@ -1252,7 +1252,7 @@ void InitializeOpcodes()
//OPCODE(CMSG_REMOVE_GLYPH, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRemoveGlyphOpcode );
//OPCODE(CMSG_DUMP_OBJECTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_DUMP_OBJECTS_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(CMSG_DISMISS_CRITTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(CMSG_DISMISS_CRITTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDismissCritter);
//OPCODE(SMSG_NOTIFY_DEST_LOC_SPELL_CAST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(CMSG_AUCTION_LIST_PENDING_SALES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListPendingSales );
OPCODE(SMSG_AUCTION_LIST_PENDING_SALES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );

View file

@ -1236,7 +1236,7 @@ enum Opcodes
CMSG_REMOVE_GLYPH = 0x0000,
CMSG_DUMP_OBJECTS = 0x0000,
SMSG_DUMP_OBJECTS_DATA = 0x0000,
CMSG_DISMISS_CRITTER = 0x0000,
CMSG_DISMISS_CRITTER = 0x4227, // 4.3.4 15595
SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x0000,
CMSG_AUCTION_LIST_PENDING_SALES = 0x2C17, // 4.3.4 15595
SMSG_AUCTION_LIST_PENDING_SALES = 0x6A27, // 4.3.4 15595

View file

@ -766,6 +766,7 @@ class WorldSession
void HandlePetCastSpellOpcode(WorldPacket& recvPacket);
void HandlePetLearnTalent(WorldPacket& recvPacket);
void HandleLearnPreviewTalentsPet(WorldPacket& recvPacket);
void HandleDismissCritter(WorldPacket& recvData);
void HandleSetActionBarTogglesOpcode(WorldPacket& recv_data);

View file

@ -768,3 +768,24 @@ void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recv_data)
_player->SendTalentsInfoData(true);
}
void WorldSession::HandleDismissCritter(WorldPacket& recvData)
{
ObjectGuid guid;
recvData >> guid;
DEBUG_LOG("WORLD: Received CMSG_DISMISS_CRITTER for %s", guid.GetString().c_str());
Unit* pet = _player->GetMap()->GetAnyTypeCreature(guid);
if (!pet)
{
DEBUG_LOG("Vanitypet %s does not exist - Player %s (guid %u, account: %u) attempted to dismiss it (possibly lagged out)",
guid.GetString().c_str(), GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), GetAccountId());
return;
}
if (_player->GetCritterGuid() == guid)
{
if (pet->GetTypeId() == TYPEID_UNIT && ((Creature*)pet)->IsTemporarySummon())
((TemporarySummon*)pet)->UnSummon();
}
}