diff options
| author | Traesh <Traesh@users.noreply.github.com> | 2018-04-08 20:35:33 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-04-08 21:35:33 +0300 |
| commit | b7bb5e6a98119512702519adecf559ecedc20743 (patch) | |
| tree | 5bb6ece03e2048f50162341bb80869ef6b4cc203 /src/server/game/Combat/ThreatManager.cpp | |
| parent | 66c559f15b574843bd3c2d5d2eb865018371f127 (diff) | |
Core/Spells: Implemented personal summons (#19231)
* By default determined by summon property flag SUMMON_PROP_FLAG_PERSONAL_SPAWN
Closes #18254
Diffstat (limited to 'src/server/game/Combat/ThreatManager.cpp')
| -rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index d9d86aa24b3..e3a8cd7bcb3 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -25,6 +25,7 @@ #include "UnitEvents.h" #include "SpellAuras.h" #include "SpellMgr.h" +#include "TemporarySummon.h" //============================================================== //================= ThreatCalcHelper =========================== @@ -415,11 +416,28 @@ void ThreatManager::addThreat(Unit* victim, float threat, SpellSchoolMask school void ThreatManager::doAddThreat(Unit* victim, float threat) { uint32 redirectThreadPct = victim->GetRedirectThreatPercent(); + Unit* redirectTarget = victim->GetRedirectThreatTarget(); + + // If victim is personnal spawn, redirect all aggro to summoner + if (TempSummon* tempSummonVictim = victim->ToTempSummon()) + { + if (tempSummonVictim->IsVisibleBySummonerOnly()) + { + // Personnal Spawns from same summoner can aggro each other + if (!GetOwner()->ToTempSummon() || + !GetOwner()->ToTempSummon()->IsVisibleBySummonerOnly() || + tempSummonVictim->GetSummonerGUID() != GetOwner()->ToTempSummon()->GetSummonerGUID()) + { + redirectThreadPct = 100; + redirectTarget = tempSummonVictim->GetSummoner(); + } + } + } // must check > 0.0f, otherwise dead loop if (threat > 0.0f && redirectThreadPct) { - if (Unit* redirectTarget = victim->GetRedirectThreatTarget()) + if (redirectTarget) { float redirectThreat = CalculatePct(threat, redirectThreadPct); threat -= redirectThreat; |
