aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp33
-rw-r--r--src/server/game/Entities/Unit/Unit.h4
2 files changed, 22 insertions, 15 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 9fce6a56083..9d2da4e89da 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -495,6 +495,14 @@ void Unit::Update(uint32 p_time)
RefreshAI();
}
+void Unit::Heartbeat()
+{
+ WorldObject::Heartbeat();
+
+ // SMSG_FLIGHT_SPLINE_SYNC for cyclic splines
+ SendFlightSplineSyncUpdate();
+}
+
bool Unit::haveOffhandWeapon() const
{
if (Player const* player = ToPlayer())
@@ -562,20 +570,6 @@ void Unit::UpdateSplineMovement(uint32 t_diff)
movespline->updateState(t_diff);
bool arrived = movespline->Finalized();
- if (movespline->isCyclic())
- {
- m_splineSyncTimer.Update(t_diff);
- if (m_splineSyncTimer.Passed())
- {
- m_splineSyncTimer.Reset(5000); // Retail value, do not change
-
- WorldPackets::Movement::FlightSplineSync flightSplineSync;
- flightSplineSync.Guid = GetGUID();
- flightSplineSync.SplineDist = float(movespline->timePassed()) / movespline->Duration();
- SendMessageToSet(flightSplineSync.Write(), true);
- }
- }
-
if (arrived)
{
DisableSpline();
@@ -611,6 +605,17 @@ void Unit::UpdateSplinePosition()
UpdatePosition(loc.x, loc.y, loc.z, loc.orientation);
}
+void Unit::SendFlightSplineSyncUpdate()
+{
+ if (!movespline->isCyclic() || movespline->Finalized())
+ return;
+
+ WorldPackets::Movement::FlightSplineSync flightSplineSync;
+ flightSplineSync.Guid = GetGUID();
+ flightSplineSync.SplineDist = float(movespline->timePassed()) / movespline->Duration();
+ SendMessageToSet(flightSplineSync.Write(), true);
+}
+
void Unit::InterruptMovementBasedAuras()
{
// TODO: Check if orientation transport offset changed instead of only global orientation
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 5fceb2e26eb..eb13ed67849 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -686,6 +686,8 @@ class TC_GAME_API Unit : public WorldObject
virtual void Update(uint32 time) override;
+ void Heartbeat() override;
+
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);
uint32 getAttackTimer(WeaponAttackType type) const { return m_attackTimer[type]; }
@@ -1920,6 +1922,7 @@ class TC_GAME_API Unit : public WorldObject
void UpdateSplineMovement(uint32 t_diff);
void UpdateSplinePosition();
+ void SendFlightSplineSyncUpdate();
void InterruptMovementBasedAuras();
// player or player's pet
@@ -1939,7 +1942,6 @@ class TC_GAME_API Unit : public WorldObject
private:
uint32 m_state; // Even derived shouldn't modify
- TimeTracker m_splineSyncTimer;
Diminishing m_Diminishing;