diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 2d8e49251..afbed2ee0 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -459,17 +459,8 @@ bool Creature::InitEntry(uint32 Entry, const CreatureData* data) SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - float runSpeed = cinfo->speed_run; - if (Pet* pet = ToPet()) - { - if (pet->isControlled() && pet->GetOwnerGUID().IsPlayer()) - { - runSpeed = 1.15f; - } - } - SetSpeed(MOVE_WALK, cinfo->speed_walk); - SetSpeed(MOVE_RUN, runSpeed); + SetSpeed(MOVE_RUN, cinfo->speed_run); SetSpeed(MOVE_SWIM, cinfo->speed_swim); SetSpeed(MOVE_FLIGHT, cinfo->speed_flight); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index bc095df32..4548a76ea 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1048,6 +1048,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) else if (petType != SUMMON_PET) LOG_ERROR("entities.pet", "Unknown type pet {} is summoned by player class {}", GetEntry(), owner->getClass()); } + + if (petType == HUNTER_PET || petType == SUMMON_PET) + { + SetSpeed(MOVE_RUN, 1.15f); + } } uint32 creature_ID = (petType == HUNTER_PET) ? 1 : cinfo->Entry; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0321294eb..f01645f3c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10700,11 +10700,6 @@ void Unit::SetMinion(Minion* minion, bool apply) // PvP, FFAPvP minion->SetByteValue(UNIT_FIELD_BYTES_2, 1, GetByteValue(UNIT_FIELD_BYTES_2, 1)); - // FIXME: hack, speed must be set only at follow - if (GetTypeId() == TYPEID_PLAYER && minion->IsPet()) - for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) - minion->SetSpeed(UnitMoveType(i), m_speed_rate[i], true); - // Ghoul pets have energy instead of mana (is anywhere better place for this code?) if (minion->IsPetGhoul() || minion->GetEntry() == 24207 /*ENTRY_ARMY_OF_THE_DEAD*/) minion->setPowerType(POWER_ENERGY); @@ -14251,7 +14246,17 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) { // Set creature speed rate if (GetTypeId() == TYPEID_UNIT) - speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached + { + if (IsPet() && ToPet()->isControlled() && IsControlledByPlayer()) + { + // contant value for player pets + speed *= 1.15f; + } + 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 @@ -15380,7 +15385,7 @@ void Unit::SetHealth(uint32 val) SetUInt32Value(UNIT_FIELD_HEALTH, val); // mobs that are now or were below 30% need to update their speed - if (GetTypeId() == TYPEID_UNIT && (prevHealthPct < 30.0 || HealthBelowPct(30))) + if (GetTypeId() == TYPEID_UNIT && !(IsPet() && ToPet()->isControlled() && IsControlledByPlayer()) && (prevHealthPct < 30.0 || HealthBelowPct(30))) { UpdateSpeed(MOVE_RUN, false); }