diff options
author | treeston <treeston.mmoc@gmail.com> | 2016-05-31 22:49:28 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-06-10 19:33:12 +0200 |
commit | 051d4036247e196801f40d4cb7826978f970cd99 (patch) | |
tree | 5801937b997246740d14d5ac8dabd6feb4d13f69 /src | |
parent | 9d9ad7b618f5f67da2518da0dfede3d953ba10b0 (diff) |
Entities/Unit: Fix speed update packets if player is being moved by something else.
Closes #17184
Closes #17254
(cherry picked from commit 19fa504ff5a51ded47f516640fc57deb6793547a)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 3 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4328af96d90..c53389d89a2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10024,20 +10024,20 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate) pet->SetSpeedRate(mtype, m_speed_rate[mtype]); } - if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER) + if (Player* playerMover = GetPlayerMover()) // unit controlled by a player. { // Send notification to self WorldPackets::Movement::MoveSetSpeed selfpacket(moveTypeToOpcode[mtype][1]); selfpacket.MoverGUID = GetGUID(); selfpacket.SequenceIndex = m_movementCounter++; selfpacket.Speed = GetSpeed(mtype); - ToPlayer()->GetSession()->SendPacket(selfpacket.Write()); + playerMover->GetSession()->SendPacket(selfpacket.Write()); // Send notification to other players WorldPackets::Movement::MoveUpdateSpeed packet(moveTypeToOpcode[mtype][2]); packet.movementInfo = &m_movementInfo; packet.Speed = GetSpeed(mtype); - SendMessageToSet(packet.Write(), false); + playerMover->SendMessageToSet(packet.Write(), false); } else { @@ -11610,6 +11610,20 @@ void CharmInfo::SetSpellAutocast(SpellInfo const* spellInfo, bool state) } } +Unit* Unit::GetMover() const +{ + if (Player const* player = ToPlayer()) + return player->m_mover; + return nullptr; +} + +Player* Unit::GetPlayerMover() const +{ + if (Unit* mover = GetMover()) + return mover->ToPlayer(); + return nullptr; +} + bool Unit::isFrozen() const { return HasAuraState(AURA_STATE_FROZEN); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 415c46afa5d..3a7d25c9ef5 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1751,7 +1751,8 @@ class TC_GAME_API Unit : public WorldObject CharmInfo* InitCharmInfo(); void DeleteCharmInfo(); void UpdateCharmAI(); - //Player* GetMoverSource() const; + Unit* GetMover() const; + Player* GetPlayerMover() const; Player* m_movedPlayer; SharedVisionList const& GetSharedVisionList() { return m_sharedVision; } void AddPlayerToVision(Player* player); |