diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Pet/PetDefines.h | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Server/Packets/PetPackets.cpp | 11 | ||||
-rwxr-xr-x | src/server/game/Server/Packets/PetPackets.h | 18 |
6 files changed, 50 insertions, 18 deletions
diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index b96799db85c..90150f3b0c6 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -67,12 +67,13 @@ enum PetSpellType PETSPELL_TALENT = 2 }; -enum ActionFeedback +enum class PetActionFeedback : uint8 { - FEEDBACK_NONE = 0, - FEEDBACK_PET_DEAD = 1, - FEEDBACK_NOTHING_TO_ATT = 2, - FEEDBACK_CANT_ATT_TARGET = 3 + None = 0, + Dead = 1, + NoTarget = 2, + InvalidTarget = 3, + NoPath = 4 }; enum PetAction : int32 diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index bfbf415c956..123c3403ec0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10243,26 +10243,36 @@ void Unit::TriggerAurasProcOnEvent(ProcEventInfo& eventInfo, AuraApplicationProc } ///----------Pet responses methods----------------- -void Unit::SendPetActionFeedback(uint8 msg) const +void Unit::SendPetActionFeedback(PetActionFeedback msg, uint32 spellId) const { Unit* owner = GetOwner(); if (!owner || owner->GetTypeId() != TYPEID_PLAYER) return; - WorldPacket data(SMSG_PET_ACTION_FEEDBACK, 1); - data << uint8(msg); - owner->ToPlayer()->SendDirectMessage(&data); + WorldPackets::Pet::PetActionFeedback petActionFeedback; + petActionFeedback.SpellID = spellId; + petActionFeedback.Response = msg; + owner->ToPlayer()->SendDirectMessage(petActionFeedback.Write()); } void Unit::SendPetActionSound(PetAction action) const { - SendMessageToSet(WorldPackets::Pet::PetActionSound(GetGUID(), static_cast<int32>(action)).Write(), false); + WorldPackets::Pet::PetActionSound petActionSound; + petActionSound.UnitGUID = GetGUID(); + petActionSound.Action = action; + SendMessageToSet(petActionSound.Write(), false); } void Unit::SendPetDismissSound() const { - if (CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId())) - SendMessageToSet(WorldPackets::Pet::PetDismissSound(static_cast<int32>(displayInfo->ModelID), GetPosition()).Write(), false); + CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId()); + if (!displayInfo) + return; + + WorldPackets::Pet::PetDismissSound petDismissSound; + petDismissSound.ModelId = displayInfo->ModelID; + petDismissSound.ModelPosition = GetPosition(); + SendMessageToSet(petDismissSound.Write(), false); } void Unit::SendPetAIReaction(ObjectGuid guid) const diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 5910b317377..a0b232460d9 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1708,7 +1708,7 @@ class TC_GAME_API Unit : public WorldObject void ClearComboPointHolders(); ///----------Pet responses methods----------------- - void SendPetActionFeedback(uint8 msg) const; + void SendPetActionFeedback(PetActionFeedback msg, uint32 spellId) const; void SendPetActionSound(PetAction action) const; void SendPetDismissSound() const; void SendPetAIReaction(ObjectGuid guid) const; diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 56d99a85012..ee694f7d366 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -487,7 +487,7 @@ void WorldSession::HandlePetCancelAuraOpcode(WorldPackets::Spells::PetCancelAura if (!pet->IsAlive()) { - pet->SendPetActionFeedback(FEEDBACK_PET_DEAD); + pet->SendPetActionFeedback(PetActionFeedback::Dead, 0); return; } diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 1b2ee6532b6..c3d060eb9f6 100755 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -51,10 +51,20 @@ WorldPacket const* WorldPackets::Pet::PetUnlearnedSpell::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Pet::PetActionFeedback::Write() +{ + _worldPacket << uint8(Response); + if (Response == ::PetActionFeedback::NoTarget || Response == ::PetActionFeedback::InvalidTarget) + _worldPacket << int32(SpellID); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Pet::PetActionSound::Write() { _worldPacket << UnitGUID; _worldPacket << int32(Action); + return &_worldPacket; } @@ -62,5 +72,6 @@ WorldPacket const* WorldPackets::Pet::PetDismissSound::Write() { _worldPacket << int32(ModelId); _worldPacket << ModelPosition; + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index 8893f2497d9..ab9856d1dc1 100755 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -19,6 +19,7 @@ #define PetPackets_h__ #include "Packet.h" +#include "PetDefines.h" #include "Position.h" #include "ObjectGuid.h" @@ -96,11 +97,21 @@ namespace WorldPackets void Read() override { } }; + class PetActionFeedback final : public ServerPacket + { + public: + PetActionFeedback() : ServerPacket(SMSG_PET_ACTION_FEEDBACK, 4 + 1) { } + + WorldPacket const* Write() override; + + int32 SpellID = 0; + ::PetActionFeedback Response = ::PetActionFeedback::None; + }; + class PetActionSound final : public ServerPacket { public: - PetActionSound(ObjectGuid unitGUID, int32 action) - : ServerPacket(SMSG_PET_ACTION_SOUND, 8 + 4), UnitGUID(unitGUID), Action(action) { } + PetActionSound() : ServerPacket(SMSG_PET_ACTION_SOUND, 8 + 4) { } WorldPacket const* Write() override; @@ -111,8 +122,7 @@ namespace WorldPackets class PetDismissSound final : public ServerPacket { public: - PetDismissSound(int32 modelId, Position modelPosition) - : ServerPacket(SMSG_PET_DISMISS_SOUND, 4 + 12), ModelId(modelId), ModelPosition(modelPosition) { } + PetDismissSound() : ServerPacket(SMSG_PET_DISMISS_SOUND, 4 + 12) { } WorldPacket const* Write() override; |