Core/Packets: converted CMSG_DISMISS_CRITTER to packet class and moved its handling to SummonInfo API

This commit is contained in:
Ovahlord committed 2025-08-22 20:42:27 +02:00
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);
+7 -20
View File
@@ -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;
};
}
}
+6 -1
View File
@@ -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);