From a06006abb0b1cc100afebd09bf9c294533d647b7 Mon Sep 17 00:00:00 2001 From: MrSmite Date: Mon, 24 Dec 2012 03:35:13 -0500 Subject: Update src/server/game/Entities/Unit/Unit.cpp Fix crash on "tame pet" --- src/server/game/Entities/Unit/Unit.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 026b2d4135c..3c34d522fe4 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12688,13 +12688,16 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) case MOVE_SWIM: case MOVE_FLIGHT: { - // Set creature speed rate from CreatureInfo + // Set creature speed rate if (GetTypeId() == TYPEID_UNIT) - if (isPet() && !isInCombat()) + { + Unit* pOwner = GetCharmerOrOwner(); // Must check for owner or crash on "Tame Pet" + + if (isPet() && !isInCombat() && pOwner) { // For every yard over 5, increase speed by 0.01 // to help prevent pet from lagging behind and despawning - float dist = GetDistance(GetCharmerOrOwner()); + float dist = GetDistance(pOwner); float base_rate = 1.00f; // base speed is 100% of owner speed if (dist < 5) @@ -12702,10 +12705,11 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) float mult = base_rate + ((dist - 5) * 0.01f); - speed *= GetCharmerOrOwner()->GetSpeedRate(mtype) * mult; // pets default to owner's speed when not in combat + speed *= pOwner->GetSpeedRate(mtype) * mult; // pets default to owner's speed when not in combat } else speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached + } // Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need // TODO: possible affect only on MOVE_RUN -- cgit v1.2.3