aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2024-05-15 02:46:16 +0200
committerOvahlord <dreadkiller@gmx.de>2024-05-28 17:01:34 +0200
commit1dba4894515c2927f072f7e5b80e6aac1264ff31 (patch)
tree1818e8fb87ab02adcdef0f292f4ae16d69f3796a
parente337d3d661407d5eae679ba8b7468784de6ab5bd (diff)
Core/AreaTriggers: Add PlaySpellVisual (#29985)
(cherry picked from commit 6affa412b18b17623a828332823d0af55d664192)
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp8
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h1
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.h11
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
5 files changed, 29 insertions, 1 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index d1ead16c014..f80617f2723 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -101,6 +101,14 @@ void AreaTrigger::RemoveFromWorld()
}
}
+void AreaTrigger::PlaySpellVisual(uint32 spellVisualId) const
+{
+ WorldPackets::AreaTrigger::AreaTriggerPlaySpellVisual packet;
+ packet.AreaTriggerGUID = GetGUID();
+ packet.SpellVisualID = spellVisualId;
+ SendMessageToSet(packet.Write(), false);
+}
+
bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreatePropertiesId, Map* map, Position const& pos, int32 duration, AreaTriggerSpawn const* spawnData /* nullptr */, Unit* caster /*= nullptr*/, Unit* target /*= nullptr*/, SpellCastVisual spellVisual /*= { 0, 0 }*/, SpellInfo const* spellInfo /*= nullptr*/, Spell* spell /*= nullptr*/, AuraEffect const* aurEff /*= nullptr*/)
{
_targetGuid = target ? target->GetGUID() : ObjectGuid::Empty;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index d27f6f5fe02..2db2fbad14e 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -84,6 +84,7 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
float GetStationaryZ() const override { return _stationaryPosition.GetPositionZ(); }
float GetStationaryO() const override { return _stationaryPosition.GetOrientation(); }
void RelocateStationaryPosition(Position const& pos) { _stationaryPosition.Relocate(pos); }
+ void PlaySpellVisual(uint32 spellVisualId) const;
private:
bool Create(AreaTriggerCreatePropertiesId areaTriggerCreatePropertiesId, Map* map, Position const& pos, int32 duration, AreaTriggerSpawn const* spawnData = nullptr, Unit* caster = nullptr, Unit* target = nullptr, SpellCastVisual spellVisual = { 0 }, SpellInfo const* spellInfo = nullptr, Spell* spell = nullptr, AuraEffect const* aurEff = nullptr);
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index 69db66ce94f..ae6dfddb134 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -99,3 +99,11 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerPlaySpellVisual::Write()
+{
+ _worldPacket << AreaTriggerGUID;
+ _worldPacket << uint32(SpellVisualID);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h
index bb7caed140c..2af22e72d2c 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.h
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.h
@@ -83,6 +83,17 @@ namespace WorldPackets
Optional<AreaTriggerMovementScriptInfo> AreaTriggerMovementScript;
ObjectGuid TriggerGUID;
};
+
+ class AreaTriggerPlaySpellVisual final : public ServerPacket
+ {
+ public:
+ AreaTriggerPlaySpellVisual() : ServerPacket(SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, 16 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid AreaTriggerGUID;
+ uint32 SpellVisualID = 0;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 8a37c7fbc83..1da2b135254 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1047,7 +1047,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_NO_CORPSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_UNATTACH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);