diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e37e65eacc..24ea3cdf20 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9237,7 +9237,7 @@ void Unit::RemoveFormationFollower(Unit* follower) Unit* follwingUnit = *itr; // Cleaning up dead references while at it if (!follwingUnit || follwingUnit == follower) - _formationFollowers.erase(itr); + itr = _formationFollowers.erase(itr); else itr++; } diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp index f18a473eac..e5eb8dd951 100644 --- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp @@ -168,7 +168,7 @@ void FollowMovementGenerator::Initialize(Unit* owner) owner->AddUnitState(UNIT_STATE_FOLLOW); // owner joins a organized follower formation. - if (_joinFormation) + if (_joinFormation && _target) { _target->AddFormationFollower(owner); UpdateFollowFormation(); @@ -276,6 +276,12 @@ void FollowMovementGenerator::UpdateFollowFormation() uint8 followSlot = 0; for (Unit* follower : _target->GetFormationFollowers()) { + if (!follower) + { + TC_LOG_ERROR("movement.motionmaster", "Unit (%s) has a invalid follower reference in its formation follower container.", _target->GetGUID().ToString().c_str()); + continue; + } + for (uint8 slot = MOTION_SLOT_IDLE; slot < MAX_MOTION_SLOT; ++slot) { MovementGenerator* moveGen = follower->GetMotionMaster()->GetMotionSlot(MovementSlot(slot));