diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index ea793ce8a..7080b5c8f 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -6057,8 +6057,11 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* Position pos; // xinef: do not use precalculated position for effect summon pet in this function - // it means it was cast by NPC and should have its position overridden - if (totalNumGuardians == 1 && GetSpellInfo()->Effects[i].Effect != SPELL_EFFECT_SUMMON_PET) + // it means it was cast by NPC and should have its position overridden unless the + // target position is specified in the DB AND the effect has no or zero radius + if ((totalNumGuardians == 1 && GetSpellInfo()->Effects[i].Effect != SPELL_EFFECT_SUMMON_PET) || + (GetSpellInfo()->Effects[i].TargetA.GetTarget() == TARGET_DEST_DB && + (!GetSpellInfo()->Effects[i].HasRadius() || GetSpellInfo()->Effects[i].RadiusEntry->RadiusMax == 0))) { pos = *destTarget; }