From 051d4036247e196801f40d4cb7826978f970cd99 Mon Sep 17 00:00:00 2001 From: treeston Date: Tue, 31 May 2016 22:49:28 +0200 Subject: Entities/Unit: Fix speed update packets if player is being moved by something else. Closes #17184 Closes #17254 (cherry picked from commit 19fa504ff5a51ded47f516640fc57deb6793547a) --- src/server/game/Entities/Unit/Unit.cpp | 20 +++++++++++++++++--- src/server/game/Entities/Unit/Unit.h | 3 ++- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'src/server') 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); -- cgit v1.2.3