diff options
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 33 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 4 |
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; |