aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMrSmite <mrsmite@att.net>2012-12-24 03:35:13 -0500
committerMrSmite <mrsmite@att.net>2012-12-24 03:35:13 -0500
commita06006abb0b1cc100afebd09bf9c294533d647b7 (patch)
treedfa0ef6dbaea9fb9419f6b21b76f89b82c5d08ed
parent8ce003700cc787ef99d162d5f60b3cc4f3505397 (diff)
Update src/server/game/Entities/Unit/Unit.cpp
Fix crash on "tame pet"
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp12
1 files changed, 8 insertions, 4 deletions
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