aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Combat/HostileRefManager.cpp
diff options
context:
space:
mode:
authorxinef1 <w.szyszko2@gmail.com>2017-01-21 14:46:32 +0100
committerShauren <shauren.trinity@gmail.com>2017-01-21 14:46:32 +0100
commitba6281bf429384a506aad5125bcc537eef5bfe77 (patch)
treeb5288348c060e7c00862456785f9bbf3b9a45a37 /src/server/game/Combat/HostileRefManager.cpp
parent01d715eaef99e91f0959dc85fb7f69eb26d01a22 (diff)
Core/Units: Drop hostile world references that are out of our sight (fixes combat bug) (#18591)
Diffstat (limited to 'src/server/game/Combat/HostileRefManager.cpp')
-rw-r--r--src/server/game/Combat/HostileRefManager.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp
index 7b4723e4e16..54b02c6a97e 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)