aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorTrazom62 <none@none>2010-01-17 10:58:11 +0100
committerTrazom62 <none@none>2010-01-17 10:58:11 +0100
commitc4eb172d04252bb94d107b8fe3e9b6ad25347271 (patch)
treeaf041cfaabf9e0f46d60c6de78a3f6422598bdf5 /src/game
parent782fa95f1f2ad6d462f92783018b34c678ca2d99 (diff)
Fix Script Naxxramas/Gothik with help of scarymovie87
Fixes issue #80. - Implement support for "merging" life and dead side after ~2 minutes, if group is not splitted - Implement support for opening central gate at 30% boss health - Implement Gothik teleport between side when above 30% boss health - Fix dead-side mobs spawn in 25-Man difficulty - Fix waves setup. - Fix some timers (this may still need some tuning). - Fix sporadic combat reset when Gothic teleport to ground. --HG-- branch : trunk
Diffstat (limited to 'src/game')
-rw-r--r--src/game/ThreatManager.cpp14
-rw-r--r--src/game/ThreatManager.h22
2 files changed, 36 insertions, 0 deletions
diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp
index cf688cf163a..ad22ba6b5c1 100644
--- a/src/game/ThreatManager.cpp
+++ b/src/game/ThreatManager.cpp
@@ -537,3 +537,17 @@ bool ThreatManager::isNeedUpdateToClient(uint32 time)
return false;
}
+// Reset all aggro without modifying the threadlist.
+void ThreatManager::resetAllAggro()
+{
+ std::list<HostilReference*> &threatlist = getThreatList();
+ if (threatlist.empty())
+ return;
+
+ for (std::list<HostilReference*>::iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
+ {
+ (*itr)->setThreat(0);
+ }
+
+ setDirty(true);
+}
diff --git a/src/game/ThreatManager.h b/src/game/ThreatManager.h
index 1c0e2708a5e..3dd444a065d 100644
--- a/src/game/ThreatManager.h
+++ b/src/game/ThreatManager.h
@@ -215,6 +215,28 @@ class TRINITY_DLL_SPEC ThreatManager
void setDirty(bool bDirty) { iThreatContainer.setDirty(bDirty); }
+ // Reset all aggro without modifying the threadlist.
+ void resetAllAggro();
+
+ // Reset all aggro of unit in threadlist satisfying the predicate.
+ template<class PREDICATE> void resetAggro(PREDICATE predicate)
+ {
+ std::list<HostilReference*> &threatlist = getThreatList();
+ if (threatlist.empty())
+ return;
+
+ for (std::list<HostilReference*>::iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
+ {
+ HostilReference* ref = (*itr);
+
+ if (predicate(ref->getTarget()))
+ {
+ ref->setThreat(0);
+ setDirty(true);
+ }
+ }
+ }
+
// methods to access the lists from the outside to do some dirty manipulation (scriping and such)
// I hope they are used as little as possible.
std::list<HostilReference*>& getThreatList() { return iThreatContainer.getThreatList(); }