diff options
| author | xinef1 <w.szyszko2@gmail.com> | 2017-01-21 14:46:32 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-12-09 14:18:42 +0100 |
| commit | 8573b651c8bb00612b161cc44664cbbb6dd16327 (patch) | |
| tree | 29ddd43eaee53238dbbf1e8954e162cbc79a9cd2 /src/server/game/Combat | |
| parent | 46c69df3a7cd3f863a7a3cca59a136a0a5cdec9d (diff) | |
Core/Units: Drop hostile world references that are out of our sight (fixes combat bug) (#18591)
(cherry-picked from ba6281bf429384a506aad5125bcc537eef5bfe77)
Diffstat (limited to 'src/server/game/Combat')
| -rw-r--r-- | src/server/game/Combat/HostileRefManager.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Combat/HostileRefManager.h | 3 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp index 98883f3ac70..bcea34d7e83 100644 --- a/src/server/game/Combat/HostileRefManager.cpp +++ b/src/server/game/Combat/HostileRefManager.cpp @@ -142,6 +142,26 @@ void HostileRefManager::deleteReferencesForFaction(uint32 faction) } //================================================= +// delete all references out of specified range + +void HostileRefManager::deleteReferencesOutOfRange(float range) +{ + HostileReference* ref = getFirst(); + range = range*range; + while (ref) + { + HostileReference* nextRef = ref->next(); + Unit* owner = ref->GetSource()->GetOwner(); + if (!owner->isActiveObject() && owner->GetExactDist2dSq(GetOwner()) > range) + { + ref->removeReference(); + delete ref; + } + ref = nextRef; + } +} + +//================================================= // delete one reference, defined by Unit void HostileRefManager::deleteReference(Unit* creature) diff --git a/src/server/game/Combat/HostileRefManager.h b/src/server/game/Combat/HostileRefManager.h index fc26d950e67..585d96b7443 100644 --- a/src/server/game/Combat/HostileRefManager.h +++ b/src/server/game/Combat/HostileRefManager.h @@ -53,6 +53,9 @@ class TC_GAME_API HostileRefManager : public RefManager<Unit, ThreatManager> // Remove specific faction references void deleteReferencesForFaction(uint32 faction); + // for combat bugs + void deleteReferencesOutOfRange(float range); + HostileReference* getFirst() { return ((HostileReference*) RefManager<Unit, ThreatManager>::getFirst()); } void updateThreatTables(); |
