diff options
| -rw-r--r-- | src/server/game/Entities/Pet/PetDefines.h | 7 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 11 | ||||
| -rw-r--r-- | src/server/scripts/Pet/pet_generic.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 2 |
4 files changed, 17 insertions, 7 deletions
diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 6bb873258e..ea7380ed23 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -23,6 +23,7 @@ #include <array> #include <string> #include <vector> +#include <numbers> enum ReactStates : uint8; @@ -202,8 +203,10 @@ enum PetScalingSpells SPELL_RISEN_GHOUL_SELF_STUN = 47466, }; -#define PET_FOLLOW_DIST 1.0f -#define PET_FOLLOW_ANGLE (M_PI/2) +constexpr float PET_FOLLOW_DIST = 2.0f; +constexpr float PET_FOLLOW_ANGLE = std::numbers::pi_v<float> / 2; +constexpr float MINI_PET_SUMMON_ANGLE = std::numbers::pi_v<float> / 4; +constexpr float MINI_PET_FOLLOW_ANGLE = std::numbers::pi_v<float>; class PetStable { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d8dcba2d5b..a95f99367d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2429,8 +2429,14 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) } break; } - case SUMMON_TYPE_JEEVES: case SUMMON_TYPE_MINIPET: + // For companions, recalculate the position to ensure they spawn at the intended π/4 angle. + destTarget->Relocate(m_originalCaster->GetNearPosition( + m_originalCaster->GetDistance2d(destTarget->GetPositionX(), destTarget->GetPositionY()), + MINI_PET_SUMMON_ANGLE + )); + [[fallthrough]]; + case SUMMON_TYPE_JEEVES: { summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn); if (!summon || !summon->HasUnitTypeMask(UNIT_MASK_MINION)) @@ -2446,8 +2452,9 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) //summon->AI()->EnterEvadeMode(); if (properties->Type != SUMMON_TYPE_JEEVES) { + summon->SetFacingToObject(m_originalCaster); summon->GetMotionMaster()->Clear(false); - summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, summon->GetFollowAngle(), MOTION_SLOT_ACTIVE); + summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } break; } diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 6e91d2a19a..165ccb0f5b 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -160,7 +160,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI if (Unit* owner = me->GetCharmerOrOwner()) { me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } } @@ -709,7 +709,7 @@ struct npc_pet_gen_toxic_wasteling : public PassiveAI if (Unit* owner = me->GetCharmerOrOwner()) { me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } me->AddAura(71854, me); // Growth checkTimer = 0; diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 29269f5379..823ad36d37 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1083,7 +1083,7 @@ class spell_item_enchanted_broom_periodic : public AuraScript { if (owner->isMoving()) { - GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, GetTarget()->GetFollowAngle(), MOTION_SLOT_ACTIVE); + GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } else { |
