Core/Packets: converted CMSG_DISMISS_CRITTER to packet class and moved its handling to SummonInfo API
This commit is contained in:
1 parent
98d4a57db1
commit
d98441695b
5 files changed
+29
-21
No files matched your search
@@ -168,6 +168,7 @@ void SummonInfo::HandlePostSummonActions()
|
||||
{
|
||||
summoner->SetMinionGUID(_summonedCreature->GetGUID());
|
||||
|
||||
// Enable player control over the summon
|
||||
if (Player* playerSummoner = summoner->ToPlayer())
|
||||
{
|
||||
_summonedCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "WorldSession.h"
|
||||
#include "CharmInfo.h"
|
||||
#include "Common.h"
|
||||
#include "CreatureAI.h"
|
||||
@@ -27,37 +26,25 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "Opcodes.h"
|
||||
#include "Pet.h"
|
||||
#include "PetPackets.h"
|
||||
#include "PetAI.h"
|
||||
#include "PetPackets.h"
|
||||
#include "Player.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellHistory.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SummonInfo.h"
|
||||
#include "Util.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
|
||||
void WorldSession::HandleDismissCritter(WorldPacket& recvData)
|
||||
void WorldSession::HandleDismissCritter(WorldPackets::Pet::DismissCritter& dismissCritter)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
recvData >> guid;
|
||||
|
||||
TC_LOG_DEBUG("network.opcode", "WORLD: Received CMSG_DISMISS_CRITTER for %s", guid.ToString().c_str());
|
||||
|
||||
Unit* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, guid);
|
||||
|
||||
if (!pet)
|
||||
{
|
||||
TC_LOG_DEBUG("entities.pet", "Vanitypet (%s) does not exist - player '%s' (guid: %u / account: %u) attempted to dismiss it (possibly lagged out)",
|
||||
guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter(), GetAccountId());
|
||||
if (dismissCritter.CritterGUID.IsEmpty() || _player->GetCritterGUID() != dismissCritter.CritterGUID)
|
||||
return;
|
||||
}
|
||||
|
||||
if (_player->GetCritterGUID() == pet->GetGUID())
|
||||
{
|
||||
if (pet->GetTypeId() == TYPEID_UNIT && pet->IsSummon())
|
||||
pet->ToTempSummon()->UnSummon();
|
||||
}
|
||||
if (SummonInfo* summonInfo = _player->GetSummonInSlot(SummonPropertiesSlot::Critter))
|
||||
summonInfo->GetSummonedCreature()->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void WorldSession::HandlePetAction(WorldPacket& recvData)
|
||||
|
||||
@@ -111,3 +111,8 @@ WorldPacket const* WorldPackets::Pet::PetSpells::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Pet::DismissCritter::Read()
|
||||
{
|
||||
_worldPacket >> CritterGUID;
|
||||
}
|
||||
@@ -122,6 +122,16 @@ namespace WorldPackets
|
||||
std::vector<uint32> Actions;
|
||||
std::vector<PetSpellCooldown> Cooldowns;
|
||||
};
|
||||
|
||||
class DismissCritter final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
DismissCritter(WorldPacket&& packet) : ClientPacket(CMSG_DISMISS_CRITTER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid CritterGUID;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -193,6 +193,11 @@ namespace WorldPackets
|
||||
class TrainerBuySpell;
|
||||
}
|
||||
|
||||
namespace Pet
|
||||
{
|
||||
class DismissCritter;
|
||||
}
|
||||
|
||||
namespace Party
|
||||
{
|
||||
class SetEveryoneIsAssistant;
|
||||
@@ -1075,7 +1080,7 @@ class TC_GAME_API WorldSession
|
||||
void HandleSetActionBarToggles(WorldPacket& recvData);
|
||||
|
||||
void HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& packet);
|
||||
void HandleDismissCritter(WorldPacket& recvData);
|
||||
void HandleDismissCritter(WorldPackets::Pet::DismissCritter& packet);
|
||||
|
||||
//Battleground
|
||||
void HandleBattlemasterHelloOpcode(WorldPacket& recvData);
|
||||
|
||||
Reference in new issue
Block a user