diff options
| author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2020-12-26 22:32:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-26 22:32:01 +0100 |
| commit | 3b2c878dd067f49ee48ddfc27c62eb4e1fe619d9 (patch) | |
| tree | ee44efef2fba97af61bed899c0ad29c5e35a017d /src/server/game/Combat/ThreatManager.cpp | |
| parent | e8b78acbee35b63f4f19fdcfdf4915cf9d784b27 (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.cpp | 18 |
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()) |
