diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 1799aa8d9..48539dd3f 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -933,7 +933,7 @@ void Creature::Motion_Initialize() GetMotionMaster()->Initialize(); else if (m_formation->getLeader() == this) { - m_formation->FormationReset(false); + m_formation->FormationReset(false, true); GetMotionMaster()->Initialize(); } else if (m_formation->isFormed()) @@ -1759,7 +1759,7 @@ void Creature::setDeathState(DeathState s, bool despawn) //Dismiss group if is leader if (m_formation && m_formation->getLeader() == this) - m_formation->FormationReset(true); + m_formation->FormationReset(true, false); bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater(); SetHover(false); diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index d1d6ac7c5..485735f1d 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -186,7 +186,7 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target) } } -void CreatureGroup::FormationReset(bool dismiss) +void CreatureGroup::FormationReset(bool dismiss, bool initMotionMaster) { if (m_members.size() && m_members.begin()->second->groupAI == 5) return; @@ -195,11 +195,18 @@ void CreatureGroup::FormationReset(bool dismiss) { if (itr->first != m_leader && itr->first->IsAlive()) { - if (dismiss) - itr->first->GetMotionMaster()->Initialize(); - else - itr->first->GetMotionMaster()->MoveIdle(); - LOG_DEBUG("entities.unit", "Set %s movement for member %s", dismiss ? "default" : "idle", itr->first->GetGUID().ToString().c_str()); + if (initMotionMaster) + { + if (dismiss) + { + itr->first->GetMotionMaster()->Initialize(); + } + else + { + itr->first->GetMotionMaster()->MoveIdle(); + } + LOG_DEBUG("entities.unit", "Set %s movement for member %s", dismiss ? "default" : "idle", itr->first->GetGUID().ToString().c_str()); + } } } m_Formed = !dismiss; diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index 19041c6f0..7184cdd9c 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -59,7 +59,7 @@ public: void AddMember(Creature* member); void RemoveMember(Creature* member); - void FormationReset(bool dismiss); + void FormationReset(bool dismiss, bool initMotionMaster); void LeaderMoveTo(float x, float y, float z, bool run); void MemberAttackStart(Creature* member, Unit* target);