aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Combat/ThreatManager.cpp
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2020-12-26 22:32:01 +0100
committerGitHub <noreply@github.com>2020-12-26 22:32:01 +0100
commit3b2c878dd067f49ee48ddfc27c62eb4e1fe619d9 (patch)
treeee44efef2fba97af61bed899c0ad29c5e35a017d /src/server/game/Combat/ThreatManager.cpp
parente8b78acbee35b63f4f19fdcfdf4915cf9d784b27 (diff)
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
Diffstat (limited to 'src/server/game/Combat/ThreatManager.cpp')
-rw-r--r--src/server/game/Combat/ThreatManager.cpp18
1 files changed, 18 insertions, 0 deletions
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 <algorithm>
+#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())