From 3b2c878dd067f49ee48ddfc27c62eb4e1fe619d9 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Sat, 26 Dec 2020 22:32:01 +0100 Subject: Core/Spells: Implemented personal summons (#19231) (#25765) * Core/Spells: Implemented personal summons (#19231) * By default determined by summon property flag SUMMON_PROP_FLAG_PERSONAL_SPAWN Closes #18254 (cherry picked from commit b7bb5e6a98119512702519adecf559ecedc20743) # Conflicts: # src/server/game/Combat/ThreatManager.cpp # src/server/game/DataStores/DBCEnums.h # src/server/game/Entities/Creature/TemporarySummon.cpp # src/server/game/Entities/Creature/TemporarySummon.h # src/server/game/Entities/GameObject/GameObject.cpp # src/server/game/Entities/Object/Object.cpp # src/server/game/Entities/Object/Object.h # src/server/game/Maps/Map.h # src/server/game/Spells/SpellEffects.cpp * Build fix * Implement feedback * Fix parameters passed in wrong order --- src/server/game/Combat/ThreatManager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/server/game/Combat/ThreatManager.cpp') diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index df954a71ff4..ac099abe940 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -31,6 +31,7 @@ #include "ObjectAccessor.h" #include "WorldPacket.h" #include +#include "TemporarySummon.h" #include "Hacks/boost_1_74_fibonacci_heap.h" BOOST_1_74_FIBONACCI_HEAP_MSVC_COMPILE_FIX(ThreatManager::threat_list_heap::value_type) @@ -319,6 +320,23 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell return; amount = 0.0f; } + else if (TempSummon* tempSummonVictim = target->ToTempSummon()) + { + if (tempSummonVictim->IsVisibleBySummonerOnly()) + { + if (Unit* tempSummonSummoner = tempSummonVictim->GetSummonerUnit()) + { + // Personnal Spawns from same summoner can aggro each other + if (!_owner->ToTempSummon() || + !_owner->ToTempSummon()->IsVisibleBySummonerOnly() || + tempSummonVictim->GetSummonerGUID() != GetOwner()->ToTempSummon()->GetSummonerGUID()) + { + AddThreat(tempSummonSummoner, amount, spell, ignoreModifiers, ignoreRedirects); + amount = 0.0f; + } + } + } + } // if we cannot actually have a threat list, we instead just set combat state and avoid creating threat refs altogether if (!CanHaveThreatList()) -- cgit v1.2.3