aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2018_08_05_00_world.sql13
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp122
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h21
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h18
-rw-r--r--src/server/game/Entities/Object/Object.cpp29
-rw-r--r--src/server/game/Globals/AreaTriggerDataStore.cpp46
-rw-r--r--src/server/game/Maps/Map.cpp1
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp38
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.h21
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp1
10 files changed, 237 insertions, 73 deletions
diff --git a/sql/updates/world/master/2018_08_05_00_world.sql b/sql/updates/world/master/2018_08_05_00_world.sql
new file mode 100644
index 00000000000..eabd469a873
--- /dev/null
+++ b/sql/updates/world/master/2018_08_05_00_world.sql
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS `spell_areatrigger_circular`;
+CREATE TABLE `spell_areatrigger_circular`(
+ `SpellMiscId` INT(10) UNSIGNED NOT NULL,
+ `StartDelay` INT(10) UNSIGNED NOT NULL DEFAULT 0,
+ `CircleRadius` FLOAT NOT NULL DEFAULT 0,
+ `BlendFromRadius` FLOAT NOT NULL DEFAULT 0,
+ `InitialAngle` FLOAT NOT NULL DEFAULT 0,
+ `ZOffset` FLOAT NOT NULL DEFAULT 0,
+ `CounterClockwise` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
+ `CanLoop` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
+ `VerifiedBuild` INT(10) UNSIGNED NOT NULL DEFAULT 0,
+ PRIMARY KEY (`SpellMiscId`)
+);
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index 6c36fec788f..b03bdab76ce 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -19,7 +19,6 @@
#include "AreaTriggerAI.h"
#include "AreaTriggerDataStore.h"
#include "AreaTriggerPackets.h"
-#include "AreaTriggerTemplate.h"
#include "CellImpl.h"
#include "Chat.h"
#include "DB2Stores.h"
@@ -137,9 +136,20 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn
UpdateShape();
- if (GetMiscTemplate()->HasSplines())
+ uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : GetUInt32Value(AREATRIGGER_DURATION);
+
+ if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT))
+ {
+ AreaTriggerCircularMovementInfo cmi = GetMiscTemplate()->CircularMovementInfo;
+ if (target && GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_ATTACHED))
+ cmi.TargetGUID = target->GetGUID();
+ else
+ cmi.Center = pos;
+
+ InitCircularMovement(cmi, timeToTarget);
+ }
+ else if (GetMiscTemplate()->HasSplines())
{
- uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : GetUInt32Value(AREATRIGGER_DURATION);
InitSplineOffsets(GetMiscTemplate()->SplinePoints, timeToTarget);
}
@@ -158,6 +168,10 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn
AI_Initialize();
+ // Relocate areatriggers with circular movement again
+ if (HasCircularMovement())
+ Relocate(CalculateCircularMovementPosition());
+
if (!GetMap()->AddToMap(this))
{
// Returning false will cause the object to be deleted - remove from transport
@@ -190,7 +204,12 @@ void AreaTrigger::Update(uint32 diff)
WorldObject::Update(diff);
_timeSinceCreated += diff;
- if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_ATTACHED))
+ // "If" order matter here, Circular Movement > Attached > Splines
+ if (HasCircularMovement())
+ {
+ UpdateCircularMovementPosition(diff);
+ }
+ else if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_ATTACHED))
{
if (Unit* target = GetTarget())
GetMap()->AreaTriggerRelocation(this, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation());
@@ -642,6 +661,101 @@ bool AreaTrigger::HasSplines() const
return bool(_spline);
}
+void AreaTrigger::InitCircularMovement(AreaTriggerCircularMovementInfo const& cmi, uint32 timeToTarget)
+{
+ // Circular movement requires either a center position or an attached unit
+ ASSERT(cmi.Center.is_initialized() || cmi.TargetGUID.is_initialized());
+
+ // should be sent in object create packets only
+ m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget;
+
+ _circularMovementInfo = cmi;
+
+ _circularMovementInfo->TimeToTarget = timeToTarget;
+ _circularMovementInfo->ElapsedTimeForMovement = 0;
+
+ if (IsInWorld())
+ {
+ WorldPackets::AreaTrigger::AreaTriggerReShape reshape;
+ reshape.TriggerGUID = GetGUID();
+ reshape.AreaTriggerCircularMovement = _circularMovementInfo;
+
+ SendMessageToSet(reshape.Write(), true);
+ }
+}
+
+bool AreaTrigger::HasCircularMovement() const
+{
+ return _circularMovementInfo.is_initialized();
+}
+
+Position const* AreaTrigger::GetCircularMovementCenterPosition() const
+{
+ if (_circularMovementInfo.is_initialized())
+ return nullptr;
+
+ if (_circularMovementInfo->TargetGUID.is_initialized())
+ if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *_circularMovementInfo->TargetGUID))
+ return center;
+
+ if (_circularMovementInfo->Center.is_initialized())
+ return &_circularMovementInfo->Center->Pos;
+
+ return nullptr;
+}
+
+Position AreaTrigger::CalculateCircularMovementPosition() const
+{
+ Position const* centerPos = GetCircularMovementCenterPosition();
+ if (!centerPos)
+ return GetPosition();
+
+ AreaTriggerCircularMovementInfo const& cmi = *_circularMovementInfo;
+
+ // AreaTrigger make exactly "Duration / TimeToTarget" loops during his life time
+ float pathProgress = float(cmi.ElapsedTimeForMovement) / float(cmi.TimeToTarget);
+
+ // We already made one circle and can't loop
+ if (!cmi.CanLoop)
+ pathProgress = std::min(1.f, pathProgress);
+
+ float radius = cmi.Radius;
+ if (G3D::fuzzyNe(cmi.BlendFromRadius, radius))
+ {
+ float blendCurve = (cmi.BlendFromRadius - radius) / radius;
+ // 4.f Defines four quarters
+ blendCurve = RoundToInterval(blendCurve, 1.f, 4.f) / 4.f;
+ float blendProgress = std::min(1.f, pathProgress / blendCurve);
+ radius = G3D::lerp(cmi.BlendFromRadius, cmi.Radius, blendProgress);
+ }
+
+ // Adapt Path progress depending of circle direction
+ if (!cmi.CounterClockwise)
+ pathProgress *= -1;
+
+ float angle = cmi.InitialAngle + 2.f * float(M_PI) * pathProgress;
+ float x = centerPos->GetPositionX() + (radius * std::cos(angle));
+ float y = centerPos->GetPositionY() + (radius * std::sin(angle));
+ float z = centerPos->GetPositionZ() + cmi.ZOffset;
+
+ return { x, y, z, angle };
+}
+
+void AreaTrigger::UpdateCircularMovementPosition(uint32 /*diff*/)
+{
+ if (_circularMovementInfo->StartDelay > GetElapsedTimeForMovement())
+ return;
+
+ _circularMovementInfo->ElapsedTimeForMovement = GetElapsedTimeForMovement() - _circularMovementInfo->StartDelay;
+
+ Position pos = CalculateCircularMovementPosition();
+
+ GetMap()->AreaTriggerRelocation(this, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation());
+#ifdef TRINITY_DEBUG
+ DebugVisualizePosition();
+#endif
+}
+
void AreaTrigger::UpdateSplinePosition(uint32 diff)
{
if (_reachedDestination)
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index c4008c8e728..98a305b5a92 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -20,15 +20,12 @@
#include "Object.h"
#include "MapObject.h"
+#include "AreaTriggerTemplate.h"
-class AreaTriggerTemplate;
-class AreaTriggerMiscTemplate;
+class AuraEffect;
+class AreaTriggerAI;
class SpellInfo;
class Unit;
-class AreaTriggerAI;
-class AuraEffect;
-
-struct AreaTriggerPolygonVertice;
namespace G3D
{
@@ -60,7 +57,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
public:
static AreaTrigger* CreateAreaTrigger(uint32 spellMiscId, Unit* caster, Unit* target, SpellInfo const* spell, Position const& pos, int32 duration, uint32 spellXSpellVisualId, ObjectGuid const& castId = ObjectGuid::Empty, AuraEffect const* aurEff = nullptr);
- void Update(uint32 p_time) override;
+ void Update(uint32 diff) override;
void Remove();
bool IsRemoved() const { return _isRemoved; }
uint32 GetSpellId() const { return GetUInt32Value(AREATRIGGER_SPELLID); }
@@ -91,6 +88,10 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
::Movement::Spline<int32> const& GetSpline() const { return *_spline; }
uint32 GetElapsedTimeForMovement() const { return GetTimeSinceCreated(); } /// @todo: research the right value, in sniffs both timers are nearly identical
+ void InitCircularMovement(AreaTriggerCircularMovementInfo const& cmi, uint32 timeToTarget);
+ bool HasCircularMovement() const;
+ Optional<AreaTriggerCircularMovementInfo> const& GetCircularMovementInfo() const { return _circularMovementInfo; }
+
void UpdateShape();
protected:
@@ -109,8 +110,12 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
void UndoActions(Unit* unit);
void UpdatePolygonOrientation();
+ void UpdateCircularMovementPosition(uint32 diff);
void UpdateSplinePosition(uint32 diff);
+ Position const* GetCircularMovementCenterPosition() const;
+ Position CalculateCircularMovementPosition() const;
+
void DebugVisualizePosition(); // Debug purpose only
ObjectGuid _targetGuid;
@@ -132,6 +137,8 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge
int32 _lastSplineIndex;
uint32 _movementTime;
+ Optional<AreaTriggerCircularMovementInfo> _circularMovementInfo;
+
AreaTriggerMiscTemplate const* _areaTriggerMiscTemplate;
GuidUnorderedSet _insideUnits;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
index 5a5c625d051..d61f13533ff 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h
@@ -37,7 +37,7 @@ enum AreaTriggerFlags
AREATRIGGER_FLAG_UNK2 = 0x00080,
AREATRIGGER_FLAG_UNK3 = 0x00100,
AREATRIGGER_FLAG_UNK4 = 0x00200,
- AREATRIGGER_FLAG_UNK5 = 0x00400
+ AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT = 0x00400
};
enum AreaTriggerTypes
@@ -92,6 +92,21 @@ struct AreaTriggerScaleInfo
} ExtraScale[MAX_AREATRIGGER_SCALE];
};
+struct AreaTriggerCircularMovementInfo
+{
+ Optional<ObjectGuid> TargetGUID;
+ Optional<TaggedPosition<Position::XYZ>> Center;
+ bool CounterClockwise = false;
+ bool CanLoop = false;
+ uint32 TimeToTarget = 0;
+ int32 ElapsedTimeForMovement = 0;
+ uint32 StartDelay = 0;
+ float Radius = 0.0f;
+ float BlendFromRadius = 0.0f;
+ float InitialAngle = 0.0f;
+ float ZOffset = 0.0f;
+};
+
class AreaTriggerTemplate
{
public:
@@ -179,6 +194,7 @@ public:
uint32 TimeToTargetScale;
AreaTriggerScaleInfo ScaleInfo;
+ AreaTriggerCircularMovementInfo CircularMovementInfo;
AreaTriggerTemplate const* Template;
std::vector<Position> SplinePoints;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 36bed0bfd4b..cd1d352eda8 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -17,6 +17,7 @@
*/
#include "Object.h"
+#include "AreaTriggerPackets.h"
#include "AreaTriggerTemplate.h"
#include "BattlefieldMgr.h"
#include "CellImpl.h"
@@ -547,7 +548,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
bool hasAreaTriggerPolygon = areaTriggerTemplate->IsPolygon();
bool hasAreaTriggerCylinder = areaTriggerTemplate->IsCylinder();
bool hasAreaTriggerSpline = areaTrigger->HasSplines();
- bool hasAreaTriggerUnkType = false; // areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_UNK5);
+ bool hasCircularMovement = areaTrigger->HasCircularMovement();
data->WriteBit(hasAbsoluteOrientation);
data->WriteBit(hasDynamicShape);
@@ -568,7 +569,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
data->WriteBit(hasAreaTriggerPolygon);
data->WriteBit(hasAreaTriggerCylinder);
data->WriteBit(hasAreaTriggerSpline);
- data->WriteBit(hasAreaTriggerUnkType);
+ data->WriteBit(hasCircularMovement);
if (hasUnk3)
data->WriteBit(0);
@@ -644,28 +645,8 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const
*data << float(areaTriggerTemplate->CylinderDatas.LocationZOffsetTarget);
}
- if (hasAreaTriggerUnkType)
- {
- /*packet.ResetBitReader();
- var unk1 = packet.ReadBit("AreaTriggerUnk1");
- var hasCenter = packet.ReadBit("HasCenter", index);
- packet.ReadBit("Unk bit 703 1", index);
- packet.ReadBit("Unk bit 703 2", index);
-
- packet.ReadUInt32();
- packet.ReadInt32();
- packet.ReadUInt32();
- packet.ReadSingle("Radius", index);
- packet.ReadSingle("BlendFromRadius", index);
- packet.ReadSingle("InitialAngel", index);
- packet.ReadSingle("ZOffset", index);
-
- if (unk1)
- packet.ReadPackedGuid128("AreaTriggerUnkGUID", index);
-
- if (hasCenter)
- packet.ReadVector3("Center", index);*/
- }
+ if (hasCircularMovement)
+ *data << *areaTrigger->GetCircularMovementInfo();
}
if (HasGameObject)
diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp
index 176b162ff9c..903525c90f5 100644
--- a/src/server/game/Globals/AreaTriggerDataStore.cpp
+++ b/src/server/game/Globals/AreaTriggerDataStore.cpp
@@ -22,6 +22,7 @@
#include "Log.h"
#include "ObjectMgr.h"
#include "Timer.h"
+#include <cmath>
namespace
{
@@ -197,6 +198,51 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
TC_LOG_INFO("server.loading", ">> Loaded 0 Spell AreaTrigger templates. DB table `spell_areatrigger` is empty.");
}
+ // 0 1 2 3 4 5 6 7
+ if (QueryResult circularMovementInfos = WorldDatabase.Query("SELECT SpellMiscId, StartDelay, CircleRadius, BlendFromRadius, InitialAngle, ZOffset, CounterClockwise, CanLoop FROM `spell_areatrigger_circular` ORDER BY `SpellMiscId`"))
+ {
+ do
+ {
+ Field* circularMovementInfoFields = circularMovementInfos->Fetch();
+ uint32 spellMiscId = circularMovementInfoFields[0].GetUInt32();
+
+ auto atSpellMiscItr = _areaTriggerTemplateSpellMisc.find(spellMiscId);
+ if (atSpellMiscItr == _areaTriggerTemplateSpellMisc.end())
+ {
+ TC_LOG_ERROR("sql.sql", "Table `spell_areatrigger_circular` reference invalid SpellMiscId %u", spellMiscId);
+ continue;
+ }
+
+ AreaTriggerCircularMovementInfo& circularMovementInfo = atSpellMiscItr->second.CircularMovementInfo;
+
+ circularMovementInfo.StartDelay = circularMovementInfoFields[1].GetUInt32();
+
+#define VALIDATE_AND_SET_FLOAT(Float, Value) \
+ circularMovementInfo.Float = Value; \
+ if (!std::isfinite(circularMovementInfo.Float)) \
+ { \
+ TC_LOG_ERROR("sql.sql", "Table `spell_areatrigger_circular` has listed areatrigger (MiscId: %u) with invalid " #Float " (%f), set to 0!", \
+ spellMiscId, circularMovementInfo.Float); \
+ circularMovementInfo.Float = 0.0f; \
+ }
+
+ VALIDATE_AND_SET_FLOAT(Radius, circularMovementInfoFields[2].GetFloat());
+ VALIDATE_AND_SET_FLOAT(BlendFromRadius, circularMovementInfoFields[3].GetFloat());
+ VALIDATE_AND_SET_FLOAT(InitialAngle, circularMovementInfoFields[4].GetFloat());
+ VALIDATE_AND_SET_FLOAT(ZOffset, circularMovementInfoFields[5].GetFloat());
+
+#undef VALIDATE_AND_SET_FLOAT
+
+ circularMovementInfo.CounterClockwise = circularMovementInfoFields[6].GetBool();
+ circularMovementInfo.CanLoop = circularMovementInfoFields[7].GetBool();
+ }
+ while (circularMovementInfos->NextRow());
+ }
+ else
+ {
+ TC_LOG_INFO("server.loading", ">> Loaded 0 AreaTrigger templates circular movement infos. DB table `spell_areatrigger_circular` is empty.");
+ }
+
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " spell areatrigger templates in %u ms.", _areaTriggerTemplateStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 2b8b453a44d..be1a3760e4c 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1442,6 +1442,7 @@ void Map::MoveAllAreaTriggersInMoveList()
{
// update pos
at->Relocate(at->_newPosition);
+ at->UpdateShape();
at->UpdateObjectVisibility(false);
}
else
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index d546c6bb6b3..f99d9831f91 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -31,26 +31,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AreaTrigger::AreaTriggerS
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AreaTrigger::AreaTriggerUnkTypeInfo const& areaTriggerUnkType)
+ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& areaTriggerCircularMovement)
{
- data.WriteBit(areaTriggerUnkType.AreaTriggerUnkGUID.is_initialized());
- data.WriteBit(areaTriggerUnkType.Center.is_initialized());
- data.WriteBit(areaTriggerUnkType.UnkBit1);
- data.WriteBit(areaTriggerUnkType.UnkBit2);
+ data.WriteBit(areaTriggerCircularMovement.TargetGUID.is_initialized());
+ data.WriteBit(areaTriggerCircularMovement.Center.is_initialized());
+ data.WriteBit(areaTriggerCircularMovement.CounterClockwise);
+ data.WriteBit(areaTriggerCircularMovement.CanLoop);
- data << uint32(areaTriggerUnkType.UnkUInt1);
- data << int32(areaTriggerUnkType.UnkInt1);
- data << uint32(areaTriggerUnkType.UnkUInt2);
- data << float(areaTriggerUnkType.Radius);
- data << float(areaTriggerUnkType.BlendFromRadius);
- data << float(areaTriggerUnkType.InitialAngel);
- data << float(areaTriggerUnkType.ZOffset);
+ data << uint32(areaTriggerCircularMovement.TimeToTarget);
+ data << int32(areaTriggerCircularMovement.ElapsedTimeForMovement);
+ data << uint32(areaTriggerCircularMovement.StartDelay);
+ data << float(areaTriggerCircularMovement.Radius);
+ data << float(areaTriggerCircularMovement.BlendFromRadius);
+ data << float(areaTriggerCircularMovement.InitialAngle);
+ data << float(areaTriggerCircularMovement.ZOffset);
- if (areaTriggerUnkType.AreaTriggerUnkGUID)
- data << *areaTriggerUnkType.AreaTriggerUnkGUID;
+ if (areaTriggerCircularMovement.TargetGUID)
+ data << *areaTriggerCircularMovement.TargetGUID;
- if (areaTriggerUnkType.Center)
- data << *areaTriggerUnkType.Center;
+ if (areaTriggerCircularMovement.Center)
+ data << *areaTriggerCircularMovement.Center;
return data;
}
@@ -84,14 +84,14 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerReShape::Write()
_worldPacket << TriggerGUID;
_worldPacket.WriteBit(AreaTriggerSpline.is_initialized());
- _worldPacket.WriteBit(AreaTriggerUnkType.is_initialized());
+ _worldPacket.WriteBit(AreaTriggerCircularMovement.is_initialized());
_worldPacket.FlushBits();
if (AreaTriggerSpline)
_worldPacket << *AreaTriggerSpline;
- if (AreaTriggerUnkType)
- _worldPacket << *AreaTriggerUnkType;
+ if (AreaTriggerCircularMovement)
+ _worldPacket << *AreaTriggerCircularMovement;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h
index 4181bad933c..e3872493481 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.h
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.h
@@ -19,9 +19,9 @@
#define AreaTriggerPackets_h__
#include "Packet.h"
+#include "AreaTriggerTemplate.h"
#include "ObjectGuid.h"
#include "Optional.h"
-#include "Position.h"
namespace WorldPackets
{
@@ -34,21 +34,6 @@ namespace WorldPackets
std::vector<TaggedPosition<Position::XYZ>> Points;
};
- struct AreaTriggerUnkTypeInfo
- {
- Optional<ObjectGuid> AreaTriggerUnkGUID;
- Optional<TaggedPosition<Position::XYZ>> Center;
- bool UnkBit1 = false;
- bool UnkBit2 = false;
- uint32 UnkUInt1 = 0;
- int32 UnkInt1 = 0;
- uint32 UnkUInt2 = 0;
- float Radius = 0.0;
- float BlendFromRadius = 0.0f;
- float InitialAngel = 0.0f;
- float ZOffset = 0.0f;
- };
-
class AreaTrigger final : public ClientPacket
{
public:
@@ -99,10 +84,12 @@ namespace WorldPackets
WorldPacket const* Write() override;
Optional<AreaTriggerSplineInfo> AreaTriggerSpline;
- Optional<AreaTriggerUnkTypeInfo> AreaTriggerUnkType;
+ Optional<AreaTriggerCircularMovementInfo> AreaTriggerCircularMovement;
ObjectGuid TriggerGUID;
};
}
}
+ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& areaTriggerCircularMovement);
+
#endif // AreaTriggerPackets_h__
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 7113fe1ea2b..55d5de35367 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -23,7 +23,6 @@
#include "ScriptMgr.h"
#include "AreaTrigger.h"
-#include "AreaTriggerTemplate.h"
#include "Creature.h"
#include "GameObject.h"
#include "ObjectAccessor.h"