aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-02-27 16:13:23 +0100
committerShauren <shauren.trinity@gmail.com>2024-02-27 16:13:23 +0100
commitdeb24f3f53540733bef15f0a90a1b7e41e76d60e (patch)
tree012925de787277ec25ce7233c3132816a56c0e4f
parent9463933eda630be97e3ab16cf66e419d2f696109 (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.cpp16
-rw-r--r--src/server/game/Entities/Unit/Unit.h7
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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);