aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index a44fdac20e9..ba2ff05dc15 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2635,6 +2635,25 @@ ReputationRank WorldObject::GetReactionTo(WorldObject const* target) const
if (this == target)
return REP_FRIENDLY;
+ auto isAttackableBySummoner = [&](Unit const* me, ObjectGuid const& targetGuid)
+ {
+ if (!me)
+ return false;
+
+ TempSummon const* tempSummon = me->ToTempSummon();
+ if (!tempSummon || !tempSummon->m_Properties)
+ return false;
+
+ if (tempSummon->m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::AttackableBySummoner)
+ && targetGuid == tempSummon->GetSummonerGUID())
+ return true;
+
+ return false;
+ };
+
+ if (isAttackableBySummoner(ToUnit(), target->GetGUID()) || isAttackableBySummoner(target->ToUnit(), GetGUID()))
+ return REP_NEUTRAL;
+
// always friendly to charmer or owner
if (GetCharmerOrOwnerOrSelf() == target->GetCharmerOrOwnerOrSelf())
return REP_FRIENDLY;