diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-02-27 16:13:23 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-02-27 16:13:23 +0100 |
commit | deb24f3f53540733bef15f0a90a1b7e41e76d60e (patch) | |
tree | 012925de787277ec25ce7233c3132816a56c0e4f | |
parent | 9463933eda630be97e3ab16cf66e419d2f696109 (diff) |
Core/Units: Added helper function to clear boss emote frame and enable SMSG_CLEAR_BOSS_EMOTES
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 32 insertions, 1 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 5a636724cc6..c285fae8f96 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13581,6 +13581,22 @@ void Unit::Whisper(uint32 textId, Player* target, bool isBossWhisper /*= false*/ target->SendDirectMessage(packet.Write()); } +void Unit::ClearBossEmotes(Optional<uint32> zoneId, Player const* target) const +{ + WorldPackets::Chat::ClearBossEmotes clearBossEmotes; + clearBossEmotes.Write(); + + if (target) + { + target->SendDirectMessage(clearBossEmotes.GetRawPacket()); + return; + } + + for (MapReference const& ref : GetMap()->GetPlayers()) + if (!zoneId || DB2Manager::IsInArea(ref.GetSource()->GetAreaId(), *zoneId)) + ref.GetSource()->SendDirectMessage(clearBossEmotes.GetRawPacket()); +} + SpellInfo const* Unit::GetCastSpellInfo(SpellInfo const* spellInfo, TriggerCastFlags& triggerFlag) const { auto findMatchingAuraEffectIn = [this, spellInfo, &triggerFlag](AuraType type) -> SpellInfo const* diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 558c750f04f..5d1fbd9e64a 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1767,6 +1767,13 @@ class TC_GAME_API Unit : public WorldObject virtual void TextEmote(uint32 textId, WorldObject const* target = nullptr, bool isBossEmote = false); virtual void Whisper(uint32 textId, Player* target, bool isBossWhisper = false); + /** + @brief Clears boss emotes frame + @param zoneId Only clears emotes for players in that zone id + @param target Only clears emotes for that player + */ + void ClearBossEmotes(Optional<uint32> zoneId = {}, Player const* target = nullptr) const; + float GetCollisionHeight() const override; uint32 GetVirtualItemId(uint32 slot) const; uint16 GetVirtualItemAppearanceMod(uint32 slot) const; diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 3755754bec1..ca54636921d 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -223,6 +223,14 @@ namespace WorldPackets int32 EmoteID = 0; }; + class ClearBossEmotes final : public ServerPacket + { + public: + ClearBossEmotes() : ServerPacket(SMSG_CLEAR_BOSS_EMOTES, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + class TC_GAME_API PrintNotification final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index acc39b92863..74adcc445b8 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1219,7 +1219,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLAIM_RAF_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ALL_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_BOSS_EMOTES, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |